2009-09-30 7 views
54

ör .:Bir PHP dizisinde bir işlev kaydedebilir misiniz?

$functions = array(
    'function1' => function($echo) { echo $echo; } 
); 

bu mümkün mü? En iyi alternatif nedir?

+18

Eğer Javascript geliyor musun? –

+1

** TL; DR - PHP 5.4'ten beri: ** '$ functions = ['function1' => function ($ echo) {echo $ echo; }]; ' ...... PHP 5.3 beri anonim fonksiyonlar mevcuttur 5.4 beri' [] 'yerine dizisi()' 'arasında –

cevap

125

birkaç seçenek vardır. create_function kullanın:

$functions = array(
    'function1' => create_function('$echo', 'echo $echo;') 
); 

Basitçe bir dize olarak işlevin adını saklamak (bu etkili tüm create_function yapıyor):

function do_echo($echo) { 
    echo $echo; 
} 

$functions = array(
    'function1' => 'do_echo' 
); 

PHP 5.3 kullanıyorsanız, anonymous functions yararlanabilirler:

$functions = array(
    'function1' => function($echo) { 
     echo $echo; 
    } 
); 

Tüm bu yöntemler, callback pseudo-type altındaki belgelerde listelenmiştir. Hangisini seçerseniz seçin, işlevinizi çağırmanın önerilen yolu, call_user_func veya call_user_func_array işleviyle olur.

$function = create_function('$echo', 'echo $echo;'); 
$function('hello world'); 
+2

Nice'i yazabilir. Tamlığı için +1 ve onuncu oyu ver. – karim79

+3

Aydınlanmaya ulaştım. Call_user_func hakkında çok teşekkürler karim79 :) –

+0

: function1 bir değer, kötü uygulama döndürdüğünde $ var = $ functions ["function1"] var mı? – Roy

9

Alex Barrett yayında takip etmek, create_function() aslında thusly işlevini çağırmak için kullanabileceğiniz bir değer döndürür " kullanım örneği:

bu eski create_function kullanarak çok daha hızlı olduğunu

not ...

//store anonymous function in an array variable e.g. $a["my_func"] 
$a = array(
    "my_func" => function($param = "no parameter"){ 
     echo "In my function. Parameter: ".$param; 
    } 
); 

//check if there is some function or method 
if(is_callable($a["my_func"])) $a["my_func"](); 
    else echo "is not callable"; 
// OUTPUTS: "In my function. Parameter: no parameter" 

echo "\n<br>"; //new line 

if(is_callable($a["my_func"])) $a["my_func"]("Hi friend!"); 
    else echo "is not callable"; 
// OUTPUTS: "In my function. Parameter: Hi friend!" 

echo "\n<br>"; //new line 

if(is_callable($a["somethingElse"])) $a["somethingElse"]("Something else!"); 
    else echo "is not callable"; 
// OUTPUTS: "is not callable",(there is no function/method stored in $a["somethingElse"]) 

REFERANSLAR:

8

PHP yana "5.3.0 Anonim işlevler de kullanılabilir hale geldi

call_user_func($functions['function1'], 'Hello world!');