create_function

(PHP 4 >= 4.0.1, PHP 5, PHP 7)

create_functionBir anonim (lamda tarzı) işlev oluşturur

Açıklama

create_function ( string $değiştirgeler , string $kod ) : string

Verilen değiştirgelerden isimsiz bir işlev oluşturur ve onun için eşsiz bir isim döndürür.

Değiştirgeler

Genellikle bu değiştirgeler tek tırnaklar arasına alınmış bir dizge ile işleve aktarılır. Tek tırnak kullanılmasının nedeni değişken isimlerini çözümleme işleminden korumaktır. Çift tırnak kullanırsanız, değişken adlarını \$avar örneğinde olduğu öncelemeniz gerekecektir.

değiştirgeler

İşlevin değiştirgeleri.

kod

İşlevin kodu.

Dönen Değerler

Hata oluşmamışsa bir dizge olarak işleve eşsiz bir isim, aksi takdirde FALSE döndürür.

Örnekler

Örnek 1 - create_function() ile isimsiz işlev oluşturmak

Bu işlevi, çalışma anında toplanan bilgileri kullanarak yeni bir işlev oluşturmak için kullanabilirsiniz.

<?php
$işlev 
create_function('$a,$b''return "ln($a) + ln($b) = " . log($a * $b);');
echo 
"Yeni bir isimsiz işlev: $işlev\n";
echo 
$işlev(2M_E) . "\n";
// Çıktısı:
// Yeni bir isimsiz işlev: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599
?>

Belki, bir değiştirge listesi üzerinde belli işlemler yapan bir genel işlem işlevi tercih edersiniz:

Örnek 2 - create_function() işlevi ile bir genel işlem işlevi oluşturmak

<?php
function process($var1$var2$farr)
{
    foreach (
$farr as $f) {
        echo 
$f($var1$var2) . "\n";
    }
}

// Birkaç matematik işlevi oluşturalım
$f1 'if ($a >=0) {return "b*a^2 = ".$b*sqrt($a);} else {return false;}';
$f2 "return \"min(b^2+a, a^2,b) = \".min(\$a*\$a+\$b,\$b*\$b+\$a);";
$f3 'if ($a > 0 && $b != 0) {return "ln(a)/b = ".log($a)/$b; } else { return false; }';
$farr = array(
    
create_function('$x,$y''return "biraz trig: ".(sin($x) + $x*cos($y));'),
    
create_function('$x,$y''return "bir hipotenüs: ".sqrt($x*$x + $y*$y);'),
    
create_function('$a,$b'$f1),
    
create_function('$a,$b'$f2),
    
create_function('$a,$b'$f3)
    );

echo 
"\nİlk isimsiz işlev grubumuz\n";
echo 
"değiştirgeler: 2.3445, M_PI\n";
process(2.3445M_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 "CRC\'ler: " . crc32($a) . ", ".crc32(b);'),
    
create_function('$a,$b''; return "benzerlik(a,b) = " . similar_text($a, $b, &$p) . "(%$p)";')
    );
echo 
"\nİkinci isimsiz işlev grubumuz\n";
process("Gün yavaş yavaş ışıyordu""Gün aydınlanıyordu"$garr);
?>

Yukarıdaki örneğin çıktısı:

İlk isimsiz işlev grubumuz
değiştirgeler: 2.3445, M_PI
biraz trig: -1.6291725057799
bir hipotenüs: 3.9199852871011
b*a^2 = 4.8103313314525
min(b^2+a, a^2,b) = 8.6382729035898
ln(a)/b = 0.27122299212594

İkinci isimsiz işlev grubumuz
** "Gün aydınlanıyordu" ve "Gün yavaş yavaş ışıyordu"
** (ilk üç karaktere bakarak) Bak bu ikisi aynı!
CRC'ler: 2226456759, 1908338681
benzerlik(a,b) = 15(%58.823529411765)

Şüphesiz, lamda tarzı (isimsiz) işlevlerin asıl kullanım amacı geriçağırım işlevleri oluşturmaktır. array_walk() ve usort() işlevlerini kullanan örnekler:

Örnek 3 - İsimsiz işlevlerin geriçağırım işlevlerinde kullanımı

<?php

$av 
= array("işte ""bir ""bu ""şu ");
array_walk($avcreate_function('&$v,$k''$v = $v . "mango";'));
print_r($av);

?>

Yukarıdaki örneğin çıktısı:

Array
(
    [0] => işte mango
    [1] => bir mango
    [2] => bu mango
    [3] => şu mango
)

Kısadan uzuna sıralanmış dizgelerden oluşan bir dizi:

<?php

$sv 
= array("kısa""daha uzun""daha da uzun""daha daha uzun");
print_r($sv);

?>

Yukarıdaki örneğin çıktısı:

Array
(
    [0] => kısa
    [1] => daha uzun
    [2] => daha da uzun
    [3] => daha daha uzun
)

Şimdi uzundan kısaya doğru sıralayalım:

<?php

usort
($svcreate_function('$a,$b','return strlen($b) - strlen($a);'));
print_r($sv);

?>

Yukarıdaki örneğin çıktısı:

(
    [0] => daha daha uzun
    [1] => daha da uzun
    [2] => daha uzun
    [3] => kısa
)

Ayrıca Bakınız