2013-05-06 24 views
5

Lần đầu tiên tôi đang cố gắng sử dụng các động create_function, và cho đến nay, không có nhiều thành công :-)Php - hiểu biết create_function() - đi qua đơn giản biến

chức năng của tôi là thế này:

function o99_brsa_custom_widgets() { 
     global $wp_meta_boxes; 
     global $o99_brsa_options; 

     for($i=0; $i> count($o99_brsa_options[content]); $i++) { 

      $widgt_id = 'o99_dashboard_widget_dyn' . $i; 
      $widgt_name = 'obmek99 widget name' . $i; 
      $out = $o99_brsa_options[content][$i]; 
      $f = create_function(' $out ',' global $out; echo $out;'); 
      do_the_widgets($widgt_id, $widgt_name, $f); 
     } 
    } 

Hành động do_the_widgets() chỉ chấp nhận tiếng vang trực tiếp và in nội dung của tiện ích.

$o99_brsa_options[content] là mảng được xác minh với $i yếu tố (mỗi nội dung là nội dung).

Điều lạ là $i đang hoạt động trên $widgt_id$widgt_name nhưng trên create_function() Tôi nhận được cùng một giá trị được in trong tất cả các tiện ích con. (echo $out)

Dường như tôi không biết làm thế nào để vượt qua một biến đơn giản với chức năng mới (Tôi đang sử dụng create_function inside global(), nhưng nó giúp ít nhất là cho bây giờ.

Vì vậy, là những gì sai lầm của tôi/hiểu lầm/lạm dụng ngay bây giờ :-) ??

+0

Nếu '$ out' sắp trở thành toàn cầu thì bạn sẽ chuyển nó làm đối số? – prodigitalson

+0

Bởi vì bằng cách nào đó, nếu tôi không, không có gì được in .. –

+1

Vâng, nếu bạn sẽ sử dụng nó như là một toàn cầu thì giá trị của nó sẽ được cấu hình bên ngoài chức năng, và sau đó bạn sẽ sửa đổi nó bên trong (hoặc không) và sửa đổi sau đó sẽ được áp dụng trên toàn cầu không chỉ bên trong. Nếu bạn chỉ cần vượt qua trong một đối số sau đó loại bỏ toàn cầu. Nếu bạn cần phải làm cả hai thay đổi tên của đối số và sau đó có nó sửa đổi '$ out' bên trong chức năng. Ví dụ: 'create_function ('$ arg', 'global $ out; echo $ out. $ Arg;');' – prodigitalson

Trả lời

19

create_function là trong thời stone age, khi kaᵠ used pen and paper to write applications, khi PeeHaa埽 got a beer vì ông viết hello would, Thế giới là tốt hơn bây giờ xin vui lòng sử dụng closures

$f = function ($out) { 
    echo $out; 
}; 

$f("Welcome"); 

Bạn sẽ cảm ơn tôi một ngày nào đó, nhưng bạn chỉ có thể sử dụng create_function nếu bạn là Gordon (Máy từ quá khứ gửi đến đây để hành hạ chúng tôi) ông đã viết điều này

$fn = create_function(
    '$x', 
    'return $x; } $foo = 42; function foo($int) { return $int; ' 
); 

See Live Demo

+1

:-) Tôi cảm ơn bạn đã có :-). nhưng phải làm gì nếu tôi cần hỗ trợ cho PHP 5.2.9? –

+0

bạn sẽ cần> = 5.3 ... – smassey

+1

Bạn có biết có bao nhiêu lỗi trong 'PHP 5.2.9'? Tôi nghĩ bạn nên nâng cấp ngay lập tức .... bởi vì nếu bạn gặp phải vấn đề này, hãy làm theo – Baba

Các vấn đề liên quan