Meminta Penutupan Ditugaskan kepada Sifat Objek Secara Terus
Dalam PHP, penutupan yang diberikan kepada sifat objek mempunyai had apabila cuba memanggilnya secara langsung. Seperti yang ditunjukkan dalam kod yang disediakan:
$obj = new stdClass(); $obj->callback = function() { print "HelloWorld!"; }; $obj->callback();
Kod ini gagal dengan ralat "Fatal error: Call to undefined method stdClass::callback()." Untuk menyelesaikan masalah ini, PHP 7 memperkenalkan kaedah invokasi langsung.
PHP 7 dan Di Atas
Dalam PHP 7 dan lebih baharu, anda boleh menggunakan penutupan yang diberikan kepada sifat objek secara terus menggunakan sintaks berikut:
$obj = new stdClass; $obj->fn = function($arg) { return "Hello $arg"; }; echo ($obj->fn)('World');
Pra-PHP 7
Sebelum PHP 7, menggunakan penutupan yang diberikan kepada sifat objek secara langsung tidak boleh dilakukan. Sebaliknya, anda perlu melaksanakan kaedah __panggilan ajaib untuk memintas panggilan dan memohon penutupan:
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');
Nota: Dalam __panggilan, adalah penting untuk mengelak daripada memanggil call_user_func_array(array($this , $kaedah), $args); kerana ini akan mencetuskan rekursi tak terhingga.
Atas ialah kandungan terperinci Bagaimana untuk Meminta Penutupan Secara Terus Ditugaskan kepada Sifat Objek dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!