함수를 PHP 배열에 저장할 수 있습니까?
예:
$functions = array(
'function1' => function($echo) { echo $echo; }
);
이게 가능합니까?어떻게 하면 좋을까요?
이를 위해 권장되는 방법은 익명 함수를 사용하는 것입니다.
$functions = [
'function1' => function ($echo) {
echo $echo;
}
];
이미 선언된 함수를 저장하는 경우 이름으로 문자열로 참조할 수 있습니다.
function do_echo($echo) {
echo $echo;
}
$functions = [
'function1' => 'do_echo'
];
오래된 버전의 PHP(<5.3) 익명 함수는 지원되지 않으므로 (PHP 7.2 이후 사용되지 않음)를 사용해야 할 수 있습니다.
$functions = array(
'function1' => create_function('$echo', 'echo $echo;')
);
이러한 메서드는 모두 설명서의 의사 유형 아래에 나열되어 있습니다.
어느 쪽을 선택하든 함수는 직접 호출할 수 있습니다(PHP ) 5.4). 또는 /:call_user_func_array
$functions['function1']('Hello world!');
call_user_func($functions['function1'], 'Hello world!');
PHP "5.3.0 Anonymous functions"를 사용할 수 있게 되었기 때문에 사용 예:
이것은 오래된 것을 사용하는 것보다 훨씬 빠르다는 것에 주의한다.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"])
참고 자료:
어나니머스 기능 : http://cz1.php.net/manual/en/functions.anonymous.php
콜 가능 테스트: http://cz2.php.net/is_callable
경고
create_function()
는 PHP 7.2.0에서 폐지되었습니다.이 기능에 의존하는 것은 매우 권장되지 않습니다.
Alex Barrett의 투고를 팔로업하기 위해 create_function()은 함수를 호출하기 위해 실제로 사용할 수 있는 값을 반환합니다.따라서 다음과 같습니다.
$function = create_function('$echo', 'echo $echo;' );
$function('hello world');
왜냐면 난...
알렉스 배럿의 자리를 확대합니다.
이 아이디어를 외부 스태틱클래스 등 가변길이 인수를 허용하기 위해 '...' 토큰을 사용할 수도 있습니다.
다음 예에서는 알기 쉽게 'array'라는 키워드를 사용했지만 각 괄호도 괜찮습니다.에서 init 함수를 사용하는 레이아웃은 보다 복잡한 코드를 위한 구성을 보여주기 위한 것입니다.
<?php
// works as per php 7.0.33
class pet {
private $constructors;
function __construct() {
$args = func_get_args();
$index = func_num_args()-1;
$this->init();
// Alex Barrett's suggested solution
// call_user_func($this->constructors[$index], $args);
// RibaldEddie's way works also
$this->constructors[$index]($args);
}
function init() {
$this->constructors = array(
function($args) { $this->__construct1($args[0]); },
function($args) { $this->__construct2($args[0], $args[1]); }
);
}
function __construct1($animal) {
echo 'Here is your new ' . $animal . '<br />';
}
function __construct2($firstName, $lastName) {
echo 'Name-<br />';
echo 'First: ' . $firstName . '<br />';
echo 'Last: ' . $lastName;
}
}
$t = new pet('Cat');
echo '<br />';
$d = new pet('Oscar', 'Wilding');
?>
자, 이제 한 줄로 줄여서...
function __construct() {
$this->{'__construct' . (func_num_args()-1)}(...func_get_args());
}
컨스트럭터뿐만 아니라 모든 함수를 오버로드하는 데 사용할 수 있습니다.
이것이 나에게 효과가 있었다.
function debugPrint($value = 'll'){
echo $value;
}
$login = '';
$whoisit = array( "wifi" => 'a', "login" => 'debugPrint', "admin" => 'c' );
foreach ($whoisit as $key => $value) {
if(isset($$key)) {
// in this case login exists as a variable and I am using the value of login to store the function I want to call
$value(); }
}
닫힘을 사용하면 함수를 배열에 저장할 수 있습니다.기본적으로 폐쇄는 지정된 이름 없이 만들 수 있는 함수, 즉 익명 함수입니다.
$a = 'function';
$array=array(
"a"=> call_user_func(function() use ($a) {
return $a;
})
);
var_dump($array);
언급URL : https://stackoverflow.com/questions/1499862/can-you-store-a-function-in-a-php-array
'programing' 카테고리의 다른 글
PHP를 사용하여 HTTP에서 HTTPS로 리디렉션 (0) | 2022.09.06 |
---|---|
MySQL IFNULL 기타 (0) | 2022.09.05 |
Vuevalidate 비동기 유효성 검사 결과가 루프로 전환됨 (0) | 2022.09.05 |
+0과 -0이 같습니까? (0) | 2022.09.05 |
파일이 존재하는 경우 File.exists()가 false를 반환합니다. (0) | 2022.09.05 |