次の workerman 使用法チュートリアル コラムでは、PHP コールバックを記述するいくつかの方法を紹介します。困っている友人の役に立てば幸いです。
は workerman でよく使用されます。最初にコールバック関数を作成し、特定の動作がトリガーされたときにこの関数を使用して関連ロジックを処理します。
PHP で最も一般的に使用されるコールバックは次のように記述されます
コールバックとしての匿名関数
匿名関数 (匿名関数)、クローズド パッケージとも呼ばれます関数 (クロージャ) を使用すると、名前を指定せずに関数を一時的に作成できます。コールバック関数の引数として最も一般的に使用される値。もちろん、他のアプリケーションもあります。
匿名関数のコールバックは、多くの場合、それを変数 (またはオブジェクトのプロパティ) に割り当てます。
$add = function($number1,$number2){ return $number1+$number2; }; echo $add(1,10);
最終結果は 11 になります。
use という使用法があり、現在、私自身の yii2-wx を含む多くのフレームワークで使用されており、WeChat の支払い結果通知を処理するときにも使用されます。
簡単に言うと、匿名関数を設定すると、親スコープから変数を継承できます。たとえば、次のコード
$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);
ここでは特に使用法はなく、関数の定義と変数への代入の順序は上下どちらでも構いませんが、構文的には単に変数の代入を追加するだけです。コールバックは 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();
コールバックとしてのクラス メソッド
これまでの知識を学んだ後は、次のことが簡単です。クラスメソッドをコールバックとして学ぶ、一文 単語: クラスのパブリックメソッドをコールバック関数として使用する;
ワーカーマンで直接使用する
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では使用できません。
以上がWorkerman を学ぶ前に知っておく必要がある PHP コールバックの記述方法のいくつかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。