首頁 >php框架 >Workerman > 正文

學習workerman之前需要知道的幾種php回調寫法

轉載2019-11-30 18:02:030580
第十期線上培訓班
下面由workerman使用教程欄目給大家介紹幾種php回調寫法,希望對需要的朋友有所幫助!

workerman中會經常使用,我們先寫一個回調函數,當某個行為被觸發后使用該函數處理相關邏輯。

在PHP中最常用的幾種回調寫法如下

匿名函數做為回調

匿名函數(Anonymous functions),也叫閉包函數(closures),允許臨時創建一個沒有指定名稱的函數。最經常用作回調函數(callback)參數的值。當然,也有其它應用的情況。

匿名函數的回調經常將其賦給一個變量(或一個對象的屬性)

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

最終結果會輸出11。

這中間有一個use的用法,現在很多框架都在使用,包括我自己發布的 yii2-wx 在處理微信付款結果通知的時候也有用到。

簡單點說就是當我們設置了匿名函數的時候,可以從父作用域繼承變量,比如如下代碼

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

則結果是21,沒錯,匿名函數體可以使用繼承過來的變量 $number。

一點要注意的是,這種繼承是在函數被定義的時候就確定了,比如如下代碼

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

結果還是21,后面重新的賦值并沒有起到作用。

那我們如何解決這個問題那?

@[email protected]

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

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

搞定了,22出現了。1 + 10 + 11;

在workerman中一般匿名函數作為回調用法如下

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

普通函數作為回調

這種用法并沒有什么可以多說的,不像匿名函數那么多細節,直接看代碼。

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

在這里沒有use用法,并且函數定義和賦值給變量順序誰上誰下都可以,在語法上這只是對add的一次變量賦值,之所以能作為回調是我們使用了add() 導致的,在workerman中一般用法如下

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

類方法作為回調

學習了前面的知識,類的方法作為回調就好學了,一句話:將一個類的公共方法作為回調函數;

直接上在workerman中的用法

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

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

類靜態方法做為回調

這個最簡單了,看代碼。

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

我們將MyClass的靜態方法onMsg方法作為回調賦值給worker->onMessage,因為是靜態方法,在onMsg內不能用this哈。

以上就是學習workerman之前需要知道的幾種php回調寫法的詳細內容,更多請關注php中文網其它相關文章!

php中文網最新課程二維碼
  • 相關標簽:workerman
  • 本文轉載于:segmentfault,如有侵犯,請聯系[email protected]刪除
  • 相關文章

    相關視頻


      網友評論

      文明上網理性發言,請遵守 新聞評論服務協議

      我要評論
    • 專題推薦

      推薦視頻教程
    • javascript初級視頻教程javascript初級視頻教程
    • jquery 基礎視頻教程jquery 基礎視頻教程
    • 視頻教程分類
      足彩吧合买平台