Home  >  Article  >  PHP Framework  >  Several PHP callback writing methods you need to know before learning Workerman

Several PHP callback writing methods you need to know before learning Workerman

藏色散人
藏色散人forward
2019-11-28 13:38:072152browse

The following workerman usage tutorial column will introduce you to several ways to write php callbacks. I hope it will be helpful to friends in need!

Several PHP callback writing methods you need to know before learning Workerman

is often used in workerman. We first write a callback function and use this function to process related logic when a certain behavior is triggered.

The most commonly used callbacks in PHP are written as follows

Anonymous functions as callbacks

Anonymous functions (Anonymous functions), also called closed Package functions (closures) allow temporary creation of a function without a specified name. The value most commonly used as a callback function argument. Of course, there are other applications as well.

The callback of an anonymous function often assigns it to a variable (or a property of an object)

$add = function($number1,$number2){
    return $number1+$number2;
};
echo $add(1,10);

The final result will be 11.

There is a usage of use, which is now used by many frameworks, including my own yii2-wx, which is also used when processing WeChat payment result notifications.

To put it simply, when we set up an anonymous function, we can inherit variables from the parent scope. For example, in the following code

$number = 10;
$add = function($number1,$number2) use ($number){
    return $number1+$number2 + $number;
};
echo $add(1,10);

, the result is 21. Yes, the anonymous function body can be used The inherited variable $number.

One thing to note is that this inheritance is determined when the function is defined. For example, the following code

$number = 10;
$add = function($number1,$number2) use ($number){
    return $number1+$number2 + $number;
};
$number = 11;
echo $add(1,10);

The result is still 21, and subsequent reassignment has no effect.

So how do we solve this problem?

@nai8@

You only need to set the inherited variable as a reference, as follows

$number = 10;
$add = function($number1,$number2) use (&$number){
    return $number1+$number2 + $number;
};
$number = 11;
echo $add(1,10);

It is done, and 22 appears. 1 10 11;

In Workerman, the general method of using anonymous functions as callbacks is as follows

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();

Ordinary functions are used as callbacks

There is nothing wrong with this usage Not much to say, there are not as many details as anonymous functions, just look at the code.

function add($number1,$number2){
    return $number1+$number2;
};
$add = "add";
echo $add(1,10);

There is no use usage here, and the order of function definition and assignment to variables can be up or down. Syntactically, this is just a variable assignment to add. The reason why it can be used as a callback is that we use add (), the general usage in Workerman is as follows

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();

Class method as callback

After learning the previous knowledge, it is easy to learn the class method as callback, one sentence Words: Use the public method of a class as a callback function;

Direct usage in 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();

We assign the onMsg method of MyClass as a callback to $worker->onMessage.

Class static method as callback

This is the simplest, look at the 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();

We assign the static method onMsg of MyClass as a callback to worker->onMessage. Because it is a static method, this cannot be used in onMsg.

The above is the detailed content of Several PHP callback writing methods you need to know before learning Workerman. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:segmentfault.com. If there is any infringement, please contact admin@php.cn delete
Previous article:workerman example testNext article:workerman example test