學(xué)習(xí)workerman之前需要知道的幾種php回調(diào)寫(xiě)法

下面由workerman使用教程欄目給大家介紹幾種php回調(diào)寫(xiě)法,希望對(duì)需要的朋友有所幫助!

學(xué)習(xí)workerman之前需要知道的幾種php回調(diào)寫(xiě)法

workerman使用教程中會(huì)經(jīng)常使用,我們先寫(xiě)一個(gè)回調(diào)函數(shù),當(dāng)某個(gè)行為被觸發(fā)后使用該函數(shù)處理相關(guān)邏輯。

在PHP中最常用的幾種回調(diào)寫(xiě)法如下

匿名函數(shù)做為回調(diào)

匿名函數(shù)(Anonymous functions),也叫閉包函數(shù)(closures),允許臨時(shí)創(chuàng)建一個(gè)沒(méi)有指定名稱(chēng)的函數(shù)。最經(jīng)常用作回調(diào)函數(shù)(callback)參數(shù)的值。當(dāng)然,也有其它應(yīng)用的情況。

立即學(xué)習(xí)PHP免費(fèi)學(xué)習(xí)筆記(深入)”;

匿名函數(shù)的回調(diào)經(jīng)常將其賦給一個(gè)變量(或一個(gè)對(duì)象的屬性)

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

最終結(jié)果會(huì)輸出11。

這中間有一個(gè)use的用法,現(xiàn)在很多框架都在使用,包括我自己發(fā)布的 yii2-wx 在處理微信付款結(jié)果通知的時(shí)候也有用到。

簡(jiǎn)單點(diǎn)說(shuō)就是當(dāng)我們?cè)O(shè)置了匿名函數(shù)的時(shí)候,可以從父作用域繼承變量,比如如下代碼

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

則結(jié)果是21,沒(méi)錯(cuò),匿名函數(shù)體可以使用繼承過(guò)來(lái)的變量 $number。

一點(diǎn)要注意的是,這種繼承是在函數(shù)被定義的時(shí)候就確定了,比如如下代碼

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

結(jié)果還是21,后面重新的賦值并沒(méi)有起到作用。

那我們?nèi)绾谓鉀Q這個(gè)問(wèn)題那?

@nai8@

只需要將繼承的變量設(shè)置為引用即可,如下

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

搞定了,22出現(xiàn)了。1 + 10 + 11;

workerman中一般匿名函數(shù)作為回調(diào)用法如下

use?WorkermanWorker; require_once?__DIR__?.?'/Workerman/Autoloader.php'; $http_worker?=?new?Worker("http://0.0.0.0:2345"); //?匿名函數(shù)回調(diào) $http_worker->onMessage?=?function($connection,?$data) { ????//?向?yàn)g覽器發(fā)送hello?world ????$connection->send('hello?world'); }; Worker::runAll();

普通函數(shù)作為回調(diào)

這種用法并沒(méi)有什么可以多說(shuō)的,不像匿名函數(shù)那么多細(xì)節(jié),直接看代碼。

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

在這里沒(méi)有use用法,并且函數(shù)定義和賦值給變量順序誰(shuí)上誰(shuí)下都可以,在語(yǔ)法上這只是對(duì)add的一次變量賦值,之所以能作為回調(diào)是我們使用了add() 導(dǎo)致的,在workerman中一般用法如下

use?WorkermanWorker; require_once?__DIR__?.?'/Workerman/Autoloader.php'; $http_worker?=?new?Worker("http://0.0.0.0:2345"); //?匿名函數(shù)回調(diào) $http_worker->onMessage?=?'on_message'; //?普通函數(shù) function?on_mesage($connection,?$data) { ????//?向?yàn)g覽器發(fā)送hello?world ????$connection->send('hello?world'); } Worker::runAll();

類(lèi)方法作為回調(diào)

學(xué)習(xí)了前面的知識(shí),類(lèi)的方法作為回調(diào)就好學(xué)了,一句話(huà):將一個(gè)類(lèi)的公共方法作為回調(diào)函數(shù);

直接上在workerman中的用法

use?WorkermanWorker; require_once?__DIR__?.?'/Workerman/Autoloader.php'; //?載入MyClass require_once?__DIR__.'/MyClass.php'; $worker?=?new?Worker("websocket://0.0.0.0:2346"); //?創(chuàng)建一個(gè)對(duì)象 $myObject?=?new?MyClass(); $worker->onMessage???=?[$myObject,?'onMsg']; Worker::runAll();

我們將MyClass的onMsg方法作為回調(diào)賦值給$worker->onMessage。

類(lèi)靜態(tài)方法做為回調(diào)

這個(gè)最簡(jiǎn)單了,看代碼。

use?WorkermanWorker; 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();

我們將MyClass的靜態(tài)方法onMsg方法作為回調(diào)賦值給worker->onMessage,因?yàn)槭庆o態(tài)方法,在onMsg內(nèi)不能用this哈。

以上就是學(xué)習(xí)

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊15 分享