您好,登錄后才能下訂單哦!
這篇文章主要介紹了在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,后面重新的賦值并沒有起到作用。
那我們如何解決這個問題那?
@nai8@
只需要將繼承的變量設置為引用即可,如下
$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哈。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“在PHP中最常用的幾種回調寫法有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。