ホームページ >PHPフレームワーク >Workerman >Workerman を学ぶ前に知っておく必要がある PHP コールバックの記述方法のいくつか

Workerman を学ぶ前に知っておく必要がある PHP コールバックの記述方法のいくつか

藏色散人
藏色散人転載
2019-11-28 13:38:072259ブラウズ

次の workerman 使用法チュートリアル コラムでは、PHP コールバックを記述するいくつかの方法を紹介します。困っている友人の役に立てば幸いです。

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 サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。