Maison  >  Article  >  développement back-end  >  Explication détaillée de la fonction de rappel php Callback

Explication détaillée de la fonction de rappel php Callback

怪我咯
怪我咯original
2017-06-19 13:29:495820parcourir

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  &#39;hello world!&#39; ;
}

// An example callback method
class  MyClass  {
    static function  myCallbackMethod () {
        echo  &#39;Hello World!&#39; ;
    }
}

// Type 1: Simple callback
call_user_func ( &#39;my_callback_function&#39; ); 

// Type 2: Static class method call
call_user_func (array( &#39;MyClass&#39; ,  &#39;myCallbackMethod&#39; )); 

// Type 3: Object method call
$obj  = new  MyClass ();
call_user_func (array( $obj ,  &#39;myCallbackMethod&#39; ));

// Type 4: Static class method call (As of PHP 5.2.3)
call_user_func ( &#39;MyClass::myCallbackMethod&#39; );

// 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( &#39;B&#39; ,  &#39;parent::who&#39; ));  // A
?>

La routine ci-dessus affichera :
<?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 ( &#39; &#39; ,  $new_numbers );
?>

Remarque : En PHP 4, vous devez utiliser une référence pour créer une fonction de rappel pointant vers un objet spécifique, plutôt que vers une copie. Voir la citation pour explication.
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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn