Maison > cadre php > Workerman > le corps du texte

Plusieurs méthodes d'écriture de rappel PHP que vous devez connaître avant d'apprendre Workerman

藏色散人
Libérer: 2019-11-30 18:02:03
avant
2208 Les gens l'ont consulté

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 !

Plusieurs méthodes d'écriture de rappel PHP que vous devez connaître avant d'apprendre Workerman

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);
Copier après la connexion

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);
Copier après la connexion

, 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);
Copier après la connexion

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);
Copier après la connexion

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();
Copier après la connexion

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);
Copier après la connexion

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();
Copier après la connexion

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();
Copier après la connexion

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();
Copier après la connexion

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!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal