Sadece eval kullanarak karşı PHP'nin create_function () ()

5 Cevap php

PHP bu gibi benzersiz bir adlandırılmış lambda işlevi oluşturur create_function () fonksiyonu var:

$myFunction = create_function('$foo', 'return $foo;');
$myFunction('bar'); //Returns bar

Bu aslında daha iyi (dışında daha kolay olmaktan) sonra sadece yapıyor:

do{
 $myFunction = 'createdFunction_'.rand();
}
while(function_exists($myFunction));
eval("function $myFunction(\$foo) { return \$foo; }");
$myFunction('bar'); //Returns bar

Create_function gerçekten iyi mi? (Dışında daha kolay olduğu gerçeği)

5 Cevap

İlgili dokümanlar benim anlayış, [1] ikisi aynı şey, create_function () sadece sizin için benzersiz bir işlev adı ile çıkageldi yapmak.

Bu soruya diğer bazı yorum adresi:

eval verilen kapsam için sadece yararlı ise create_function, kodunuzu diğer bölümlerine erişilebilir işlevini yapan bir değişkene atanabilir.

Biliyorsunuz ki eval () geçerli kapsamda çalışır, ancak fonksiyon tanımları yine genel ad haline terk olsun. [2] olabilir Yani bir işlev tanımladığınız zaman, bu programda her yerde erişilebilir olacaktır.

) () Global fonksiyon listesi, create_function (yığılmayı olacaktır eval olmaz kullanma

create_function () sadece [3] bazı özel callback türü, yeni işlevin adı ile bir dize döndürür. Yani, her iki teknik global ad kirletir.

Yani hayır, ayrı create_function dan () kolay olmak, eval () daha iyi olması için görünmüyor.

Dipnotlar:

[1] http://au2.php.net/manual/en/functions.user-defined.php; http://au.php.net/create_function; http://au.php.net/eval

[2] http://au2.php.net/manual/en/functions.user-defined.php

[3] http://au.php.net/create_function

Dışında büyük bir fark var ki dan,) () global işlevi listesini create_function (yığılmayı olacaktır eval olmaz kullanma. However, her iki yöntem de hata-eğilimli bir PHP dize içindeki işlevi vücudu yazmaya gerek ve benim proje üzerinde çalışıyor olsaydı ben sadece normal bir sözdizimi kullanarak bir yardımcı işlev bildirmek için size sipariş.

PHP Anonim işlevler çok kötü kod bunları kullanarak aslında not daha iyi olduğunu uygulanmaktadır. (Neyse ki bu PHP 5.3 sabit olacaktır).

Şahsen, ben dizileri sıralarken create_function () son derece kullanışlı olduğunu tespit ettik.

Aslında, ben sadece web arandı ve PHP belgelerine bu iyi bir örnek var gibi görünüyor.

http://us.php.net/create_function

Example #3 Using anonymous functions as callback functions için aşağı kaydırın.

eval verilen kapsam için sadece yararlı ise create_function, kodunuzu diğer bölümlerine erişilebilir işlevini yapan bir değişkene atanabilir.

(Dışında daha kolay olduğu gerçeği)

Ben bu kadar kolayca bu işten nasıl anlamıyorum. Sizin iki örnek göz önüne alındığında, hangi bir bakışta anlamak daha kolaydır? Create_function başarmak niyetinde ne söyler. Eval değil.