Le manuel utilise les termes "callback" et "callable" de manière interchangeable. Cependant, le terme "callback" fait traditionnellement référence à une chaîne ou à une valeur de tableau qui agit comme un élément d'information. pointeur de fonction La programmation fonctionnelle permet de référencer une fonction ou une méthode de classe pour une invocation future. Cela a permis de mettre en place des éléments de programmation fonctionnelle depuis PHP 4. Les saveurs sont les suivantes :
$cb1 = 'someGlobalFunction';
$cb2 = ['ClassName', 'someStaticMethod'];
$cb3 = [$object, 'somePublicMethod'];
// this syntax is callable since PHP 5.2.3 but a string containing it
// cannot be called directly
$cb2 = 'ClassName::someStaticMethod';
$cb2(); // fatal error
// legacy syntax for PHP 4
$cb3 = array(&$object, 'somePublicMethod');
C'est une manière sûre d'utiliser les valeurs appelables en général :
if (is_callable($cb2)) {
// Autoloading will be invoked to load the class "ClassName" if it's not
// yet defined, and PHP will check that the class has a method
// "someStaticMethod". Note that is_callable() will NOT verify that the
// method can safely be executed in static context.
$returnValue = call_user_func($cb2, $arg1, $arg2);
}
Les versions modernes de PHP permettent d'invoquer les trois premiers formats ci-dessus directement en tant que $cb()
. call_user_func
y call_user_func_array
soutenir tout ce qui précède.
Ver: http://php.net/manual/en/language.types.callable.php
Notes/Caveats :
- Si la fonction/classe a un espace de nom, la chaîne doit contenir le nom entièrement qualifié. Par exemple
['Vendor\Package\Foo', 'method']
-
call_user_func
ne prend pas en charge le passage de non-objets par référence, vous pouvez donc soit utiliser call_user_func_array
ou, dans les versions ultérieures de PHP, enregistrez le rappel dans une variable et utilisez la syntaxe directe : $cb()
;
- Les objets avec un
__invoke()
(y compris les fonctions anonymes) entrent dans la catégorie "appelable" et peuvent être utilisées de la même manière, mais je ne les associe personnellement pas au terme "callback" hérité.
- L'héritage
create_function()
crée une fonction globale et renvoie son nom. Il s'agit d'une enveloppe pour eval()
et les fonctions anonymes doivent être utilisées à la place.
1 votes
Je vais en citer un autre question à celui-ci, parce que j'essayais d'appeler une fermeture.