Home > PHP Framework > Workerman > body text

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

藏色散人
Release: 2019-11-30 18:02:03
forward
2222 people have browsed it

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);
Copy after login

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);
Copy after login

, 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);
Copy after login

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);
Copy after login

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();
Copy after login

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);
Copy after login

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();
Copy after login

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();
Copy after login

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();
Copy after login

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!

Related labels:
source:segmentfault.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template