ホームページ >バックエンド開発 >PHPチュートリアル >php Callbackコールバック関数の詳細説明
PHP 5.4 以降、呼び出し可能型を使用して コールバック型 コールバックを指定できます。このドキュメントでは、同じ理由でコールバック タイプ情報を使用します。
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() を使用する場合など)、前のコールバックでキャッチされなかった例外があると、後続のコールバックは呼び出されなくなります。
以上がphp Callbackコールバック関数の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。