Depuis PHP 5.4, le type callable peut être utilisé pour spécifier le type de rappel de rappel. Ce document utilise des informations de type de rappel pour la même raison.
Certaines fonctions telles que call_user_func() ou usort() peuvent accepter une fonction de rappel définie par l'utilisateur comme paramètres. La fonction de rappel peut être non seulement une fonction simple, mais également une méthode objet, y compris des méthodes de classe statique.
Passing
Une fonction PHP passe son nom sous forme de type chaîne. Toute fonction intégrée ou définie par l'utilisateur peut être utilisée, à l'exception des constructions de langage telles que : array() , echo , empty() , eval() , exit() , isset() , list() , print ou unset() . Les méthodes d'un objet instancié sont passées sous forme de tableau, avec l'index 0 contenant l'objet et l'index 1 contenant le nom de la méthode.
Les méthodes de classe statique peuvent également être transmises sans instancier un objet de la classe en incluant le nom de la classe en indice 0 au lieu de l'objet. Depuis PHP 5.2.3, il est également possible de passer 'ClassName::methodName'.
En plus des fonctions ordinaires définies par l'utilisateur, create_function() peut être utilisée pour créer une fonction de rappel anonyme. Depuis PHP 5.3.0, il est également possible de passer la fermeture au paramètre callback.
Exemple n°1 Exemple de fonction de rappel
Exemple n°2 Exemple d'utilisation de Closure<?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 ?>
<?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
Lorsque plusieurs rappels sont enregistrés dans une fonction (comme l'utilisation de call_user_func() et call_user_func_array()), s'il y a une exception non interceptée dans le rappel précédent, les suivants ne seront plus appelés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!