La colonne suivante du tutoriel Workerman vous présentera plusieurs méthodes d'écriture de rappels php. J'espère qu'elle sera utile aux amis qui en ont besoin !
est souvent utilisé dans workerman Nous écrivons d'abord une fonction de rappel et utilisons cette fonction pour traiter la logique associée lorsqu'un certain comportement est déclenché.
Les méthodes d'écriture de rappel les plus couramment utilisées en PHP sont les suivantes
Fonctions anonymes comme rappels
Fonctions anonymes, également appelées fonctions de package fermé (fermetures ) autorise la création temporaire d'une fonction sans nom spécifié. La valeur la plus couramment utilisée comme argument de fonction de rappel. Bien entendu, il existe également d’autres applications.
Le rappel d'une fonction anonyme l'affecte souvent à une variable (ou une propriété d'un objet)
$add = function($number1,$number2){ return $number1+$number2; }; echo $add(1,10);
Le résultat final sera 11.
Il existe une utilisation de use, qui est maintenant utilisée par de nombreux frameworks, y compris mon propre yii2-wx, qui est également utilisé lors du traitement des notifications de résultat de paiement WeChat.
Pour faire simple, lorsque nous configurons une fonction anonyme, nous pouvons hériter des variables du scope parent. Par exemple, dans le code suivant
$number = 10; $add = function($number1,$number2) use ($number){ return $number1+$number2 + $number; }; echo $add(1,10);
, le résultat est 21. Oui, le corps de la fonction anonyme peut être utilisé. La variable héritée $number.
Une chose à noter est que cet héritage est déterminé lorsque la fonction est définie. Par exemple, le code suivant
$number = 10; $add = function($number1,$number2) use ($number){ return $number1+$number2 + $number; }; $number = 11; echo $add(1,10);
Le résultat est toujours 21, et la réaffectation ultérieure n'a aucun effet.
Alors comment résoudre ce problème ?
@nai8@
Définissez simplement la variable héritée comme référence, comme suit
$number = 10; $add = function($number1,$number2) use (&$number){ return $number1+$number2 + $number; }; $number = 11; echo $add(1,10);
Terminé, 22 apparaît. 1 + 10 + 11 ;
Dans Workerman, l'utilisation générale des fonctions anonymes comme rappels est la suivante
use Workerman\Worker; require_once __DIR__ . '/Workerman/Autoloader.php'; $http_worker = new Worker("http://0.0.0.0:2345"); // 匿名函数回调 $http_worker->onMessage = function($connection, $data) { // 向浏览器发送hello world $connection->send('hello world'); }; Worker::runAll();
Fonctions ordinaires comme rappels
Ceci l'utilisation n'existe pas. Que dire de plus, il n'y a pas autant de détails que de fonctions anonymes, il suffit de regarder le code.
function add($number1,$number2){ return $number1+$number2; }; $add = "add"; echo $add(1,10);
Il n'y a aucune utilisation ici, et l'ordre de définition des fonctions et d'affectation aux variables peut être syntaxiquement supérieur ou inférieur, il s'agit simplement d'une affectation de variable à ajouter. le rappel est que nous utilisons add () causé par, l'utilisation générale dans Workerman est la suivante
use Workerman\Worker; require_once __DIR__ . '/Workerman/Autoloader.php'; $http_worker = new Worker("http://0.0.0.0:2345"); // 匿名函数回调 $http_worker->onMessage = 'on_message'; // 普通函数 function on_mesage($connection, $data) { // 向浏览器发送hello world $connection->send('hello world'); } Worker::runAll();
Méthode de classe comme rappel
Après avoir appris les connaissances précédentes, méthode de classe comme le rappel est facile à apprendre, une phrase Mots : Utiliser la méthode publique d'une classe comme fonction de rappel ;
Utilisation directe dans Workererman
use Workerman\Worker; require_once __DIR__ . '/Workerman/Autoloader.php'; // 载入MyClass require_once __DIR__.'/MyClass.php'; $worker = new Worker("websocket://0.0.0.0:2346"); // 创建一个对象 $myObject = new MyClass(); $worker->onMessage = [$myObject, 'onMsg']; Worker::runAll();
Nous attribuons la méthode onMsg de MyClass comme rappel à $worker->onMessage.
Méthode statique de classe comme rappel
C'est la plus simple, regardez le code.
use Workerman\Worker; require_once __DIR__ . '/Workerman/Autoloader.php'; // 载入MyClass require_once __DIR__.'/MyClass.php'; $worker = new Worker("websocket://0.0.0.0:2346"); $worker->onMessage = [$myObject, 'onMsg']; Worker::runAll();
Nous attribuons la méthode statique onMsg de MyClass comme rappel à worker->onMessage Parce qu'il s'agit d'une méthode statique, elle ne peut pas être utilisée dans onMsg.
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!