首頁 >後端開發 >php教程 >如何在 PHP 中直接呼叫分配給物件屬性的閉包?

如何在 PHP 中直接呼叫分配給物件屬性的閉包?

Susan Sarandon
Susan Sarandon原創
2024-12-09 17:28:11879瀏覽

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

Pre-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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn