call_user_funcとcall_user_func_Arrayの違い
どちらの関数も、関数を動的に呼び出す必要がある場合に使用され、関数名が不確定で、パラメータが不確定な場合に使用されます.違いは以下に説明します.
大部分のPHPはすべて知っていて、1つの関数を呼び出して、直接関数名を書いて括弧とすればいいです.
1、パラメータのない関数を呼び出す
一般関数呼び出し
出力:
bar
しかし、存在しない関数を呼び出すと、致命的なエラーが表示されます.
出力:Fatal error: Call to undefined function no_exist_func()
call_を使用user_func呼び出しの場合:
出力:Warning: call_user_func() expects parameter 1 to be a valid callback, function 'no_exist_func' not found or invalid function name
call_を使用user_func_array呼び出しの場合、この関数は2つのパラメータを要求し、2つのパラメータを伝達する必要があります.関数がなければ、空の配列を伝達します.
出力:Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'no_exist_func' not found or invalid function name
2、パラメータのある関数を呼び出す
一般関数呼び出し
出力:
bar1---bar2
call_user_func関数呼び出し、パラメータ伝達は文字列形式で、いくつかのパラメータが必要で、いくつかのパラメータを伝達して、この関数はn個のパラメータを伝達することができます
出力:bar1---bar2
call_user_func_array関数呼び出し、パラメータは配列形式で入力され、この関数には2つのパラメータしかありません.
出力:
bar1---bar2
3、オブジェクト向けの呼び出し
非静的メソッドの呼び出し
:
: Strict standards: call_user_func() expects parameter 1 to be a valid callback, non-static method Person::getName() should not be called statically
:My name is PHP,I am 20 years old this year.My name is GO,I am 8 years old this year.
:My name is GO,I am 8 years old this year.
";
echo call_user_func(array("Person", "getName"),"PHP","20");
echo "
";
echo call_user_func("Person::getName","PHP","20");
echo "
";
echo call_user_func(['Person', 'getName'], "PHP","20");
echo "
";
echo call_user_func(array(new Person(),"getName"),"PHP","20");
echo "
";
echo "use call_user_func_array:";
echo "
";
echo call_user_func_array(array(new Person(),"getName"),array("GO","8"));
echo "
";
echo call_user_func_array(array("Person","getName"),array("GO","8"));
echo "
";
echo call_user_func_array(["Person","getName"],array("GO","8"));
echo "
";
:
use call_user_func:
My name is PHP,I am 20 years old this year.
My name is PHP,I am 20 years old this year.
My name is PHP,I am 20 years old this year.
My name is PHP,I am 20 years old this year.
use call_user_func_array:
My name is GO,I am 8 years old this year.
My name is GO,I am 8 years old this year.
My name is GO,I am 8 years old this year.
4、
:
0 1
:
1、call_user_func , n ,call_user_func_array 2 , 2 ;
2、call_user_func ,call_user_func_array ;
3、call_user_func ,call_user_func_array ;
4、 call_user_func call_user_func_array 。