


Explication détaillée de l'utilisation de la fonction de rappel de la fonction personnalisée PHP
Je développe récemment un système PHP afin d'améliorer l'évolutivité du système, je souhaite ajouter un mécanisme de traitement d'événements similaire à Javascript par exemple. : Je souhaite ajouter un message au système. Après avoir été ajouté, je souhaite enregistrer le journal en utilisant un code de type Javascript, il doit être écrit comme ceci :
function fnCallBack( $news ) { //将$news的信息记录到日志中 writeLog( $news->getTitle().' has been added successfully!'); } $newsEventManager->addEventListener( 'add' , fnCallBack );
Parmi eux, la fonction fnCallBack. est la fonction de rappel , et addEventListener signifie écouter l'événement d'ajout de newsEventManager. Lorsqu'un article d'actualité est ajouté, le système appellera la fonction fnCallBack pour terminer l'action writeLog.
Cependant, la méthode de passage de fonction en PHP est très différente de celle en Javascript. En Javascript, les fonctions sont aussi des objets, et elles peuvent être facilement passées en paramètres, mais pas en PHP.
$newsEventManager->addEventListener( 'add' , fnCallBack );
Le fnCallBack dans la ligne de code ci-dessus ressemble au handle de cette fonction, mais en fait c'est une chaîne et non la fonction que nous voulons.
Afin d'implémenter notre modèle d'événement, il est nécessaire d'étudier la méthode d'implémentation de la fonction de rappel de PHP.
1. Rappel de la fonction globale
La fonction globale signifie ici une fonction définie directement à l'aide de la fonction. Elle n'est incluse dans aucun objet ou classe. Veuillez regarder l'exemple suivant
Exemple de code :
function fnCallBack( $msg1 , $msg2 ) { echo 'msg1:'.$msg1; echo "<br />\n"; echo 'msg2:'.$msg2; } $fnName = "fnCallBack"; $params = array( 'hello' , 'world' ); call_user_func_array( $fnName , $params );
Description du code :
La fonction intégrée PHP call_user_func_array est utilisée ici pour effectuer l'appel. call_user_func_array a deux paramètres. Le premier paramètre est une chaîne, indiquant le nom de la fonction à appeler. Le deuxième paramètre est un tableau, indiquant la liste des paramètres, qui sera transmise à la fonction à appeler dans l'ordre.
2. Rappels de méthodes statiques d'une classe
Et si la méthode que nous voulons rappeler est une méthode statique d'une classe ? Nous pouvons toujours utiliser la méthode call_user_func_array intégrée de PHP pour effectuer des appels, veuillez consulter l'exemple :
Exemple de code :
class MyClass { public static function fnCallBack( $msg1 , $msg2 ) { echo 'msg1:'.$msg1; echo "<br />\n"; echo 'msg2:'.$msg2; } } $className = 'MyClass'; $fnName = "fnCallBack"; $params = array( 'hello' , 'world' ); call_user_func_array( array( $className , $fnName ) , $params );
Description du code :
Ce code est le même que le première méthode Le code est très similaire. On passe le nom de la classe (MyClass) comme premier paramètre de call_user_func_array pour implémenter le rappel de la méthode statique de la classe. Notez que le premier paramètre de call_user_func_array est actuellement un tableau. Le premier élément du tableau est le nom de la classe et le deuxième élément est le nom de la fonction à appeler
3. méthode
J'ai d'abord essayé la méthode d'appel sous la forme de chaîne la plus primitive, comme indiqué ci-dessous :
class MyClass { private $name = 'abc'; public function fnCallBack( $msg1 = 'default msg1' , $msg2 = 'default msg2' ) { echo 'object name:'.$this->name; echo "<br />\n"; echo 'msg1:'.$msg1; echo "<br />\n"; echo 'msg2:'.$msg2; } } $myobj = new MyClass(); $fnName = "fnCallBack"; $params = array( 'hello' , 'world' ); $myobj->$fnName();
L'appel a réussi, mais comment transmettre le paramètre params à cette méthode ? params est transmis directement, il sera utilisé comme paramètre. Comment diviser les paramètres et les transmettre ?
J'ai vérifié le Manuel PHP et j'ai trouvé la fonction create_function. Cette méthode peut utiliser des chaînes pour créer une fonction anonyme. OK, j'ai une idée, je peux créer une fonction anonyme. , dans cette fonction anonyme, appelez notre fonction de rappel et transmettez les paramètres.
Créez d'abord manuellement une fonction anonyme anonyme. Dans cette fonction, utilisez la méthode que j'ai apprise plus tôt pour appeler la fonction de rappel, comme indiqué ci-dessous :
class MyClass { private $name = 'abc'; public function fnCallBack( $msg1 = 'default msg1' , $msg2 = 'default msg2' ) { echo 'object name:'.$this->name; echo "<br />\n"; echo 'msg1:'.$msg1; echo "<br />\n"; echo 'msg2:'.$msg2; } } $myobj = new MyClass(); $fnName = "fnCallBack"; $params = array( 'hello' , 'world' ); function anonymous() { global $myobj; global $fnName; global $params; $myobj->$fnName( $params[0] , $params[1] ); } anonymous();
Ensuite, j'utilise create_function Pour créer cette fonction anonyme, en même temps, params[0], params[1] dans le code doivent être générés dynamiquement, le code est le suivant :
$strParams = ''; $strCode = 'global $myobj;global $fnName;global $params;$myobj->$fnName('; for ( $i = 0 ; $i < count( $params ) ; $i ++ ) { $strParams .= ( '$params['.$i.']' ); if ( $i != count( $params )-1 ) { $strParams .= ','; } } $strCode = $strCode.$strParams.");"; $anonymous = create_function( '' , $strCode); $anonymous();
Ce code peut définissez une fonction anonyme, et enregistrez-la dans la variable $anonymous Enfin, appelez ceci $anonymous pour implémenter le rappel de méthode.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

CakePHP est un framework MVC open source. Cela facilite grandement le développement, le déploiement et la maintenance des applications. CakePHP dispose d'un certain nombre de bibliothèques pour réduire la surcharge des tâches les plus courantes.

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et
