Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Mendapat Penutupan yang Ditugaskan dengan Betul kepada Hartanah Objek dalam PHP?
Meminta Penutupan Ditugaskan kepada Sifat Objek Secara Terus
Menetapkan penutupan pada harta objek membolehkan pembangun mengaitkan fungsi dengan objek. Walau bagaimanapun, mengakses penutupan secara langsung boleh menimbulkan masalah.
Masalahnya:
Apabila cuba memohon penutupan yang diberikan kepada sifat objek secara langsung, ralat berikut berlaku:
Fatal error: Call to undefined method stdClass::callback().
Ini kerana harta itu disimpan sebagai objek penutupan, yang tidak mempunyai __invoke() kaedah.
Penyelesaian dalam PHP 7 dan ke atas:
Dalam PHP 7 dan seterusnya, sintaks berikut tersedia:
$obj = new stdClass; $obj->fn = function($arg) { return "Hello $arg"; }; echo ($obj->fn)('World');
Sebagai alternatif, Penutupan ::call() boleh digunakan, walaupun ia tidak berfungsi dengannya StdClass:
Closure::call($obj->callback, ['World']);
Penyelesaian sebelum PHP 7:
Sebelum PHP 7, kaedah sihir __call boleh dilaksanakan untuk memintas seruan 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: Kaedah __panggilan tidak boleh digunakan call_user_func_array(array($this, $method), $args) kerana ia akan membawa kepada gelung tak terhingga.
Atas ialah kandungan terperinci Bagaimana untuk Mendapat Penutupan yang Ditugaskan dengan Betul kepada Hartanah Objek dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!