Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Mengendalikan Pembayang Jenis untuk Tatasusunan Objek?

Bagaimana Mengendalikan Pembayang Jenis untuk Tatasusunan Objek?

Patricia Arquette
Patricia Arquetteasal
2024-10-18 07:02:03803semak imbas

How to Handle Type Hinting for Arrays of Objects?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn