ホームページ >バックエンド開発 >PHPチュートリアル >PHPでオブジェクトプロパティに割り当てられたクロージャを直接呼び出す方法は?

PHPでオブジェクトプロパティに割り当てられたクロージャを直接呼び出す方法は?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-09 17:28:11884ブラウズ

How to Directly Invoke Closures Assigned to Object Properties in PHP?

オブジェクト プロパティに割り当てられたクロージャを直接呼び出す

PHP では、オブジェクト プロパティに割り当てられたクロージャを直接呼び出す場合、制限があります。提供されたコードに示すように:

$obj = new stdClass();
$obj->callback = function() {
    print "HelloWorld!";
};
$obj->callback();

このコードは、「致命的エラー: 未定義メソッド stdClass::callback() の呼び出し」というエラーで失敗します。これを解決するために、PHP 7 では直接呼び出しメソッドが導入されました。

PHP 7 以降

PHP 7 以降では、オブジェクト プロパティに割り当てられたクロージャを次を使用して直接呼び出すことができます。次の構文:

$obj = new stdClass;
$obj->fn = function($arg) { return "Hello $arg"; };
echo ($obj->fn)('World');

PHP 以前7

PHP 7 より前では、オブジェクトのプロパティに割り当てられたクロージャーを直接呼び出すことはできませんでした。代わりに、呼び出しをインターセプトしてクロージャを呼び出すマジック __call メソッドを実装する必要がありました。

class Foo
{
    public function __call($method, $args)
    {
        if(is_callable(array($this, $method))) {
            return call_user_func_array($this->$method, $args);
        }
        // else throw exception
    }
}

$foo = new Foo;
$foo->cb = function($who) { return "Hello $who"; };
echo $foo->cb('World');

注: __call では、 call_user_func_array(array($this) の呼び出しを避けることが重要です。 、$method)、$args);これにより無限再帰がトリガーされるためです。

以上がPHPでオブジェクトプロパティに割り当てられたクロージャを直接呼び出す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。