2009-09-30 33 views
54

ví dụ:Bạn có thể lưu trữ một hàm trong một mảng PHP không?

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

Điều này có thể? Cách thay thế tốt nhất là gì?

+18

bạn đang đến từ javascript? –

+1

** TL; DR - kể từ PHP 5.4: ** '$ functions = ['function1' => function ($ echo) {echo $ echo; }]; ' ...... vì có sẵn 5.3 hàm ẩn danh, vì 5.4 bạn có thể viết' [] 'thay vì' mảng() ' –

Trả lời

125

Có một vài tùy chọn. Sử dụng create_function:

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

Đơn giản chỉ cần lưu trữ tên của chức năng như là một chuỗi (đây là một cách hiệu quả tất cả các create_function đang làm):

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

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

Nếu bạn đang sử dụng PHP 5.3 bạn có thể tận dụng anonymous functions:

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

Tất cả các phương pháp này được liệt kê trong tài liệu theo callback pseudo-type. Cho dù bạn chọn cách nào, cách đề nghị gọi chức năng của bạn sẽ là với chức năng call_user_func hoặc call_user_func_array.

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

Tốt. 1 cho đầy đủ, và để cho bạn phiếu bầu thứ mười. – karim79

+3

Tôi đã đạt đến giác ngộ. Rất cám ơn karim79 :) –

+0

về call_user_func: Là $ var = $ functions ["function1"], khi function1 trả về một giá trị, thực hành xấu? – Roy

9

Để theo dõi bài Alex Barrett, create_function() trả về một giá trị mà bạn thực sự có thể sử dụng để gọi hàm, thusly:

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

Kể từ PHP "5.3.0 chức năng Anonymous trở nên có sẵn ", ví dụ về việc sử dụng:

lưu ý rằng đây là nhanh hơn nhiều so với sử dụng cũ create_function ...

//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"]) 

Tài liệu tham khảo:

Các vấn đề liên quan