create_function Kod dizgesini değerlendirerek dinamik olarak bir işlev oluşturur &warn.deprecated.function-7-2-0.removed-8-0-0; &reftitle.description; stringcreate_function stringbağımsız_değişkenler stringkod Verilen bağımsız değişkenlerden dinamik olarak bir işlev oluşturur ve onun için eşsiz bir isim döndürür. Bu işlev dahili olarak bir eval çağrısı yapar, bu nedenle eval ile aynı güvenlik sorunlarına sahiptir. Ayrıca, oluşturulan işlev küresel bağlamda ve serbest bırakılamaz olduğundan kötü başarım ve bellek kullanımı özellikleri de vardır. Bu işlev yerine yerleşik bir isimsiz işlev kullanılmalıdır. &reftitle.parameters; Normalde bu bağımsız değişkenleri tek tırnaklı dizgeler olarak aktarmanız önerilir. Çift tırnaklı dizgeler kullanılırsa, koddaki değişken adlarının \$somevar örneğindeki gibi dikkatli bir şekilde öncelenmesi gerekecektir. bağımsız_değişkenler Tek tırnaklı dizge olarak, işlevin bağımsız değişkenleri. kod İşlevin kodu. &reftitle.returnvalues; Başarı durumunda bir dizge olarak işleve eşsiz bir isim, aksi takdirde &false; döndürür. İşlev isminin yazdırılamayan bir karakter ("\0") içerdiği unutulmamalıdır, bu nedenle bu isim yazdırılırken veya başka bir dizgeye eklenirken dikkatli olunmalıdır. &reftitle.examples; - <function>create_function</function> veya isimsiz işlevlerle ile bir işlevin dinamik olarak oluşturulması Çalışma anında toplanan bilgileri kullanarak yeni bir işlev oluşturmak için dinamik olarak oluşturulmuş bir işlev kullanabilirsiniz. Önce, create_function kullanarak: ]]> Ve, isimsiz işlev kullanarak; dikkat edilirse, kod ve bağımsız değişkenler artık dizgelerin içinde değildir: ]]> &example.outputs; - <function>create_function</function> işlevi veya isimsiz işlevlerle bir genel işlem işlevi oluşturmak Diğer bir kullanım, bir bağımsız değişken listesi üzerinde belli işlemler yapan genel bir işleyici işlev olabilir: =0) {return "b*a^2 = ".$b*sqrt($a);} else {return false;}'), create_function('$a,$b', "return \"min(b^2+a, a^2,b) = \".min(\$a*\$a+\$b,\$b*\$b+\$a);"), create_function('$a,$b', 'if ($a > 0 && $b != 0) {return "ln(a)/b = ".log($a)/$b; } else { return false; }') ); echo "\nBirinci dinamik işlev grubumuz\n"; echo "bağımsız değişkenler: 2.3445, M_PI\n"; process(2.3445, M_PI, $farr); // birkaç tane de dizge işlevi oluşturalım $garr = array( create_function('$b,$a', 'if (strncmp($a, $b, 3) == 0) return "** \"$a\" '. 've \"$b\"\n** (ilk üç karaktere bakarak) Bak bu ikisi aynı!";'), create_function('$a,$b', 'return "CRCs: " . crc32($a) . ", ".crc32($b);'), create_function('$a,$b', 'return "benzerlik(a,b) = " . similar_text($a, $b, $p) . "($p%)";') ); echo "\nİkinci dinamik işlev grubumuz\n"; process("Gün yavaş yavaş ışıyordu", "Gün aydınlanıyordu", $garr); ?> ]]> Aynı kodu bu kez isimsiz işlevlerle oluşturuluyor. Dikkat edilirse, koddaki değişken isimleri artık dizge içinde olmadığından öncelenmemiştir. =0) {return "b*a^2 = ".$b*sqrt($a);} else {return false;} }, function($a,$b) { return "min(b^2+a, a^2,b) = " . min($a*$a+$b, $b*$b+$a); }, function($a,$b) { if ($a > 0 && $b != 0) {return "ln(a)/b = ".log($a)/$b; } else { return false; } } ); echo "\nBirinci dinamik işlev grubumuz\n"; echo "bağımsız değişkenler: 2.3445, M_PI\n"; process(2.3445, M_PI, $farr); // birkaç tane de dizge işlevi oluşturalım $garr = array( function($b,$a) { if (strncmp($a, $b, 3) == 0) return "** \"$a\" " . "ve \"$b\"\n** (ilk üç karaktere bakarak) Bak bu ikisi aynı!"; }, function($a,$b) { return "CRCs: " . crc32($a) . ", ".crc32($b); }, function($a,$b) { return "benzerlik(a,b) = " . similar_text($a, $b, $p) . "($p%)"; } );echo "\nİkinci dinamik işlev grubumuz\n"; process("Gün yavaş yavaş ışıyordu", "Gün aydınlanıyordu", $garr); ?> ]]> &example.outputs; - Dinamik işlevlerin geriçağırım işlevlerinde kullanımı Şüphesiz, dinamik işlevlerin asıl kullanım amacı geriçağırım işlevleri oluşturmaktır. array_walk ve usort işlevlerini kullanan örnekler: ]]> İsimsiz işlev kullanarak: ]]> &example.outputs; işte mango [1] => bir mango [2] => bu mango [3] => şu mango ) ]]> Bir dizgeyi create_function ile uzundan kısaya sıralamak: ]]> İsimsiz işlev kullanarak: ]]> &example.outputs; kısa [1] => daha uzun [2] => daha da uzun [3] => daha daha uzun ) Sıralı: Array ( [0] => daha daha uzun [1] => daha da uzun [2] => daha uzun [3] => kısa ) ]]> &reftitle.seealso; İsimsiz işlevler