PHP 5.4 以降、呼び出し可能型を使用してコールバック型 callback を指定できるようになりました。このドキュメントでは、同じ理由でコールバック タイプ情報を使用します。
call_user_func() や usort() などの一部の関数は、ユーザー定義のコールバック関数をパラメーターとして受け入れることができます。コールバック関数は単純な関数だけでなく、静的クラス メソッドなどのオブジェクト メソッドも使用できます。
受け渡し
PHP 関数は、その名前を文字列型として渡します。 array()、echo、empty()、eval()、exit()、isset()、list()、print または unset() などの言語構造を除く、任意の組み込み関数またはユーザー定義関数を使用できます。 。
インスタンス化されたオブジェクトのメソッドは配列として渡され、添字 0 にはオブジェクトが含まれ、添字 1 にはメソッド名が含まれます。
添字 0 にオブジェクトの代わりにクラス名が含まれている限り、クラスのオブジェクトをインスタンス化せずに静的クラス メソッドを渡すこともできます。 PHP 5.2.3 以降では、「ClassName::methodName」を渡すことも可能です。
通常のユーザー定義関数に加えて、create_function() を使用して匿名コールバック関数を作成できます。 PHP 5.3.0 以降では、コールバック パラメータにクロージャを渡すことも可能です。
例 #1 コールバック関数の例
<?php // An example callback function function my_callback_function() { echo 'hello world!'; } // An example callback method class MyClass { static function myCallbackMethod() { echo 'Hello World!'; } } // Type 1: Simple callback call_user_func('my_callback_function'); // Type 2: Static class method call call_user_func(array('MyClass', 'myCallbackMethod')); // Type 3: Object method call $obj = new MyClass(); call_user_func(array($obj, 'myCallbackMethod')); // Type 4: Static class method call (As of PHP 5.2.3) call_user_func('MyClass::myCallbackMethod'); // Type 5: Relative static class method call (As of PHP 5.3.0) class A { public static function who() { echo "A\n"; } } class B extends A { public static function who() { echo "B\n"; } } call_user_func(array('B', 'parent::who')); // A ?>
例 #2 Closure を使用した例
<?php // Our closure $double = function($a) { return $a * 2; }; // This is our range of numbers $numbers = range(1, 5); // Use the closure as a callback here to // double the size of each element in our // range $new_numbers = array_map($double, $numbers); print implode(' ', $new_numbers); ?>
上記のルーチンは出力します:
2 4 6 8 10
注: PHP 4 では、参照を使用して、コピーではなく、特定のオブジェクト。説明については引用を参照してください。
注:
複数のコールバックが関数に登録されている場合 (call_user_func() と call_user_func_array() を使用する場合など)、前のコールバックでキャッチされなかった例外がある場合、後続のコールバックは呼び出されなくなります。