2009-09-30 2 views
54

예컨대 :함수를 PHP 배열에 저장할 수 있습니까?

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

이 가능합니까? 가장 좋은 대안은 무엇입니까?

+18

당신이 자바 스크립트에서 오는거야? –

+1

** TL; DR - PHP 5.4 이후 : ** $ functions = [ 'function1'=> function ($ echo) {echo $ echo; }];' ...... PHP 5.3의 익명 함수는 5.4이므로'array()'대신'[]'를 쓸 수 있습니다. –

답변

125

몇 가지 옵션이 있습니다. create_function 사용

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

단순히 문자열로 함수의 이름을 저장 (이것이 효과적으로 모든 create_function을하고있다) :

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

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

당신이 PHP 5.3을 사용하는 경우 anonymous functions를 사용할 수있다 :

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

이러한 방법은 모두 설명서의 callback pseudo-type에 나와 있습니다. 어느 것을 선택하든 함수를 호출하는 권장 방법은 call_user_func 또는 call_user_func_array 함수를 사용하는 것입니다.

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

Nice. +1을 완성하고 10 번째 득표를하십시오. – karim79

+3

나는 계발에 이르렀다. 많은 감사 karim79 :) –

+0

about call_user_func : $ var [$ function [ "function1"], function1이 값을 반환 할 때, 나쁜 습관입니까? – Roy

9

알렉스 바렛의 게시물에 후속, create_function()는 당신이 실제로 thusly 히 함수를 호출하는 데 사용할 수있는 값을 반환 "사용의 예 :

이 오래된 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"]) 

참조 :

8

PHP 때문에 "5.3.0 익명 기능을 사용할 수있게 :

call_user_func($functions['function1'], 'Hello world!'); 
관련 문제