現在の言語: 日本語 |
call_user_func |
コールバック関数 |
/*
function func1()
{
echo "func1 execute".PHP_EOL;
}
*/
class test1
{
//クラス内のメソッドを実行するケース
function test1()
{
/*
Fatal error: Uncaught TypeError: call_user_func(): Argument #1 ($callback) must be a valid callback, function "func1" not found or invalid function name
*/
//call_user_func("func1");
call_user_func([$this, "func1"]);//func1 execute
call_user_func("test1::func2");//static func2 execute
}
private function func1()
{
echo "func1 execute".PHP_EOL;
}
private static function func2()
{
echo "static func2 execute".PHP_EOL;
}
//戻り値を実行するケース
function test2()
{
$num1 = 10;
$num2 = 20;
//引数を指定するケース
$result = call_user_func([$this, "func3"], $num1, $num2);
echo "result:$result".PHP_EOL;//result:30
}
private function func3(int $num1, int $num2):int
{
return $num1 + $num2;
}
function test3()
{
$num1 = 10;
$num2 = 20;
//引数を指定するケース
//Warning: test1::func4(): Argument #2 ($num2) must be passed by reference, value given
//$result = call_user_func([$this, "func4"], $num1, $num2);
}
private function func4(int $num1, int &$num2)//ここで参照渡しを設定しておく
{
$num2++;
return $num1 + $num2;
}
//コールバック関数を引数にしたケース
function test4()
{
call_user_func([$this, "func5"], function($str) {
echo "Callback received: $str";
});
//Callback received: func5
}
private function func5(callable $callback):void
{
$callback("func5");
}
}
echo "<pre>";
$cls1= new test1();
$cls1->test1();
$cls1->test2();
$cls1->test3();
$cls1->test4();
echo "</pre>";
/*
function func1()
{
echo "func1 execute".PHP_EOL;
}
*/
class test1
{
// Execute a method within a class
function test1()
{
/*
Fatal error: Uncaught TypeError: call_user_func(): Argument #1 ($callback) must be a valid callback, function "func1" not found, or invalid function name
*/
/call_user_func("func1");
call_user_func([$this, "func1"]);//func1 execute
call_user_func("test1::func2");//static func2 execute
}
private function func1()
{
echo "func1 execute".PHP_EOL;
}
private static function func2()
{
echo "static func2 execute".PHP_EOL;
}
// Execute the return value
function test2()
{
$num1 = 10;
$num2 = 20;
//Argument specification case
$result = call_user_func([$this, "func3"], $num1, $num2);
echo "result:$result".PHP_EOL;//result:30
}
private function func3(int $num1, int $num2):int
{
return $num1 + $num2;
}
function test3()
{
$num1 = 10;
$num2 = 20;
//Argument specification case
//Warning: test1::func4(): Argument #2 ($num2) must be passed by reference, value given
//$result = call_user_func([$this, "func4"], $num1, $num2);
}
private function func4(int $num1, int &$num2)//Set up reference passing here
{
$num2++;
return $num1 + $num2;
}
//Callback function argument
function test4()
{
call_user_func([$this, "func5"], function($str) {
echo "Callback received: $str";
});
//Callback received: func5
}
private function func5(callable $callback):void
{
$callback("func5");
}
}
echo "<pre>";
$cls1= new test1();
$cls1->test1();
$cls1->test2();
$cls1->test3();
$cls1->test4();
echo "</pre>";
| 著作権情報 |
| ホームページおよプリ等に掲載されている情報等については、いかなる保障もいたしません。 ホームページおよびアプリ等を通じて入手したいかなる情報も複製、販売、出版または使用させたり、 または公開したりすることはできません。 当方は、ホームページおよびアプリ等を利用したいかなる理由によっての障害等が発生しても、 その結果ホームページおよびアプリ等を利用された本人または他の第三者が被った損害について 一切の責任を負わないものとします。 |