PHPコールバック関数の使い方と分析
2089 ワード
一、コールバック関数の概念
まずC言語のコールバック関数を見てみましょう.コールバック関数は関数ポインタで呼び出される関数です.関数のポインタ(アドレス)をパラメータとして別の関数に渡すと、そのポインタが指す関数を呼び出すために使用される場合、これはコールバック関数です.コールバック関数は、関数の実装者によって直接呼び出されるのではなく、特定のイベントまたはアイテムが発生したときに別の側によって呼び出され、イベントまたは条件に応答するために使用されます.
他の言語のコールバック関数の概念はそれと似ているが、様々な言語のコールバック関数の実現メカニズムが異なり、通俗的には、コールバック関数は私たちが定義した関数であるが、私たちが直接呼び出すのではなく、別の関数を通じて呼び出され、この関数はコールバック関数の名前とパラメータを受信することによってその呼び出しを実現する.
二、phpにおけるコールバック関数の実現
phpには2つの内蔵関数call_が用意されています.user_func()とcall_user_func_array()はコールバック関数のサポートを提供します.
この2つの関数の違いは次のとおりです.
スクリプト内のグローバル関数、クラスで$thisが使用されていない非静的メソッド、クラスで$thisが使用されている非静的メソッド(オブジェクトを入力する必要がある)、クラス内の静的メソッドのコールバックをどのように実現するか、以下はテストに合格したコードです.
まずC言語のコールバック関数を見てみましょう.コールバック関数は関数ポインタで呼び出される関数です.関数のポインタ(アドレス)をパラメータとして別の関数に渡すと、そのポインタが指す関数を呼び出すために使用される場合、これはコールバック関数です.コールバック関数は、関数の実装者によって直接呼び出されるのではなく、特定のイベントまたはアイテムが発生したときに別の側によって呼び出され、イベントまたは条件に応答するために使用されます.
他の言語のコールバック関数の概念はそれと似ているが、様々な言語のコールバック関数の実現メカニズムが異なり、通俗的には、コールバック関数は私たちが定義した関数であるが、私たちが直接呼び出すのではなく、別の関数を通じて呼び出され、この関数はコールバック関数の名前とパラメータを受信することによってその呼び出しを実現する.
二、phpにおけるコールバック関数の実現
phpには2つの内蔵関数call_が用意されています.user_func()とcall_user_func_array()はコールバック関数のサポートを提供します.
この2つの関数の違いは次のとおりです.
call_user_func_array ,
mixed call_user_func_array ( callable $callback ,array $param_arr), 。
call_user_func($callback, 1, 2,…) 。
スクリプト内のグローバル関数、クラスで$thisが使用されていない非静的メソッド、クラスで$thisが使用されている非静的メソッド(オブジェクトを入力する必要がある)、クラス内の静的メソッドのコールバックをどのように実現するか、以下はテストに合格したコードです.
";
}
// call_user_func f1
call_user_func('f1','han','wen');
// call_user_func_array
call_user_func_array('f1',array('han','wen'));
class A{
public $name;
function show($arg1){
echo 'the arg is:'.$arg1."
";
echo 'my name is:'.$this->name;
echo "
";
}
function show1($arg1,$arg2){
echo __METHOD__.' exec,the args is:'.$arg1.' '.$arg2."
";
}
public static function show2($arg1,$arg2){
echo __METHOD__.' of class A exec, the args is:'.$arg1.' '.$arg2."
";
}
}
// , $this
$a = new A;
$a->name = 'wen';
call_user_func_array(array($a,'show',),array('han!'));
// , , $this
call_user_func_array(array('A','show1',),array('han!','wen'));
//
call_user_func_array(array('A','show2'),array('argument1','argument2'));