亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

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

Java_oldboy / 721人閱讀

摘要:在中最常用的幾種回調(diào)寫(xiě)法如下匿名函數(shù)做為回調(diào)匿名函數(shù),也叫閉包函數(shù),允許臨時(shí)創(chuàng)建一個(gè)沒(méi)有指定名稱(chēng)的函數(shù)。最經(jīng)常用作回調(diào)函數(shù)參數(shù)的值。匿名函數(shù)的回調(diào)經(jīng)常將其賦給一個(gè)變量或一個(gè)對(duì)象的屬性最終結(jié)果會(huì)輸出。

在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)用的情況。

匿名函數(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哈。

我的知識(shí)分享 https://nai8.me

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/28550.html

相關(guān)文章

  • workerman / 小談PHP幾種運(yùn)行模式

    摘要:話(huà)說(shuō)當(dāng)下一共有種運(yùn)行模式,分別是和模塊模式。使用,全稱(chēng)進(jìn)程管理器進(jìn)行管理。工作原理啟動(dòng)時(shí)載入進(jìn)程管理器進(jìn)程管理器自身初始化,啟動(dòng)多個(gè)解釋器進(jìn)程并等待來(lái)自的連接當(dāng)客戶(hù)端請(qǐng)求到達(dá)時(shí),進(jìn)程管理器選擇并連接到一個(gè)解釋器。 我們知道 workerman 程序需要在php-cli模式下運(yùn)行,也就是命令行模式,這塊我們有必要了解一下。 話(huà)說(shuō)PHP當(dāng)下一共有4種運(yùn)行模式,分別是CGI、FastCGI、...

    darkbaby123 評(píng)論0 收藏0
  • ThinkPHP 3.2 整合 Workerman 踩坑

    摘要:一號(hào)坑整合加載第三方有幾種方式,具體參考官方手冊(cè)我用的是第一種命名空間自動(dòng)加載的方式,因?yàn)槲蚁碌陌姹臼怯忻臻g的,所以一定要把目錄放對(duì)了,把文件夾放到下,并且把里面除文件外的所有文件改為結(jié)尾。 由于需要開(kāi)發(fā)長(zhǎng)連接應(yīng)用,要用到了Workerman,我是Windows的服務(wù)器,所以要把Wokerman裝到windows,不得不說(shuō)Windows做服務(wù)器那真是「好用」啊,一開(kāi)始自己按照Wor...

    OpenDigg 評(píng)論0 收藏0
  • workerman 簡(jiǎn)要分析

    摘要:后面每開(kāi)啟一個(gè)子進(jìn)程,會(huì)將子進(jìn)程的存儲(chǔ)到中,用來(lái)后面主進(jìn)程監(jiān)控子進(jìn)程,如果子進(jìn)程意外終止,主進(jìn)程可以重新佛。將當(dāng)前子進(jìn)程設(shè)置為會(huì)話(huà)組再次創(chuàng)建子進(jìn)程,為了防止在的系統(tǒng)下重新打開(kāi)控制終端。 wokerman 啟動(dòng)分析 @(學(xué)習(xí))[workerman, php] 前期想說(shuō)的 也是最近才看的代碼,遇到不懂得地方就去google,所以這篇文章里面穿插了很多參考資料,可以直接點(diǎn)擊閱覽。 需要了解一...

    senntyou 評(píng)論0 收藏0
  • PHP學(xué)習(xí)方向-進(jìn)階(二)

    摘要:如果你現(xiàn)在處于以下幾種狀態(tài),本資料非常適合你準(zhǔn)備換工作,不知道從哪開(kāi)始準(zhǔn)備技術(shù)遇到瓶頸,不知道該學(xué)什么準(zhǔn)備學(xué),但不知道領(lǐng)域有多深進(jìn)階篇原理原理共享存活時(shí)間異常處理如何迭代對(duì)象如何數(shù)組化操作對(duì)象如何函數(shù)化對(duì)象是什么,說(shuō)個(gè)使用場(chǎng)景是什么,如 如果你現(xiàn)在處于以下幾種狀態(tài),本資料非常適合你: 準(zhǔn)備換工作,不知道從哪開(kāi)始準(zhǔn)備 技術(shù)遇到瓶頸,不知道該學(xué)什么 準(zhǔn)備學(xué) PHP,但不知道領(lǐng)域有多深 ...

    崔曉明 評(píng)論0 收藏0
  • 通過(guò)GatewayWorker/Workerman搭建Websocket微服務(wù)

    摘要:背景最近在一些項(xiàng)目需要用到實(shí)時(shí)推送給分組的用戶(hù),前端需要傳輸給后端的信息比較少,通過(guò)多方考慮選擇了通過(guò)框架基于搭建微服務(wù)。擁有定時(shí)器異步客戶(hù)端異步異步異步異步消息隊(duì)列等眾多高性能組件。配合的定時(shí)器,也可以定時(shí)推送數(shù)據(jù)。 背景 最近在一些項(xiàng)目需要用到Websocket實(shí)時(shí)推送給分組的用戶(hù),前端需要傳輸給后端的信息比較少,通過(guò)多方考慮選擇了通過(guò)GatewayWorker框架(基于Worke...

    QLQ 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<