2013-05-06 34 views
5

İlk defa ben dinamik create_function kullanmaya çalışıyorum ve am geçen şimdi, pek başarıPhp - anlayış create_function() - basit değişken

Benim işlevi :-) bu kadar:

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); 
     } 
    } 

do_the_widgets() eylemi yalnızca doğrudan bir eko kabul eder ve widget'ın içeriğini yazdırır.

$o99_brsa_options[content]$i elemanları (her içerik) ile doğrulanmış bir dizidir.

garip bir şey $i$widgt_id ve $widgt_name üzerinde çalışıyor ama create_function() üzerinde tüm widget'lar basılmış aynı değeri elde ediyoruz. (echo $out)

O ben küresel iç create_function() kullanıyorum (yeni işleve basit değişken geçmek nasıl bilmiyorum görünüyor, ama şimdilik az yardımcı olur.

Yani, ne benim hatam/yanlış anlama/kötüye şimdi :-) ??

+0

Eğer '$ out' bir global olacaksa, o zaman bunu bir argüman olarak iletiyorsunuz? – prodigitalson

+0

i Sakın eğer her nasılsa, hiçbir şey baskılı olsun Çünkü .. –

+1

Eh sen bir sonra değerini zaten işlevi dışında biçimlendirilmemiştir, ve sonra içine (ya da değil) değiştirmek istiyorum küresel ve bu kadar kullanacağım eğer Modifikasyon daha sonra sadece içinde değil küresel olarak geçerli olacaktır. Sadece bir argümana geçmeniz gerekiyorsa, globali kaldırın. Eğer her ikisini de yapmanız gerekiyorsa, argümanın adını değiştiriniz ve fonksiyonun içinde '$ out' değiştiriniz. Örnek: 'create_function ('$ arg', 'global $ out; echo $ out. $ Arg;');' – prodigitalson

cevap

19

create_function o hello would yazdığı için PeeHaa埽 got a beer dünya iyi olduğunda artık tek bir gün bana teşekkür ederim closures

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

$f("Welcome"); 

kullanın lütfen, Ama sadece eğer create_function kullanabilirsiniz stone age, kaᵠ used pen and paper to write applications sırasında oldu Gordon (bize işkence buraya gönderilen geçmişten makine) o bu

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

See Live Demo

+1

:-) Size şimdiden teşekkür ediyorum :-). ama PHP 5.2.9 için desteğe ihtiyacım varsa ne yapmalıyım? –

+0

ihtiyacınız olacak> = 5.3 ... – smassey

+1

PHP 5.2.9'da kaç tane hata var? Bence hemen yükseltme yapmalısın .... çünkü eğer bu işe yararsan daha fazla sorun varsa – Baba