Petunjuk Jenis untuk Tatasusunan Objek
Apabila bekerja dengan kelas dan fungsi, pembayang jenis boleh digunakan untuk menentukan jenis argumen yang dijangkakan. Walau bagaimanapun, apabila cuba menghantar tatasusunan objek ke fungsi, ralat mungkin berlaku. Artikel ini meneroka cara mengendalikan situasi sedemikian.
Untuk memahami isu ini, pertimbangkan kelas dan fungsi berikut:
<code class="php">class Foo {} function getFoo(Foo $f) {}</code>
Percubaan untuk menghantar pelbagai objek Foo ke getFoo mengakibatkan ralat :
Catchable fatal error: Argument 1 passed to getFoo() must be an instance of Foo, array given
Untuk menyelesaikan isu ini, jenis tersuai yang mewakili tatasusunan objek Foo boleh dibuat. Satu pendekatan ialah mencipta kelas yang memanjangkan ArrayObject dan melaksanakan kaedah offsetSet untuk mengesahkan bahawa sebarang nilai yang ditambahkan pada tatasusunan ialah tika Foo.
<code class="php">class ArrayOfFoo extends \ArrayObject { public function offsetSet($key, $val) { if ($val instanceof Foo) { return parent::offsetSet($key, $val); } throw new \InvalidArgumentException('Value must be a Foo'); } }</code>
Dengan menggunakan jenis ArrayOfFoo tersuai, anda boleh memastikan bahawa anda sedang bekerja dengan tatasusunan objek Foo dan fungsi boleh menerima hujah ArrayOfFoo.
Pilihan lain ialah menggunakan perpustakaan seperti Haldayne untuk mengendalikan boilerplate untuk semakan keperluan keahlian:
<code class="php">class ArrayOfFoo extends \Haldayne\Boost\MapOfObjects { protected function allowed($value) { return $value instanceof Foo; } }</code>
Atas ialah kandungan terperinci Bagaimana Mengendalikan Pembayang Jenis untuk Tatasusunan Objek?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!