Bagaimana Mengendalikan Pembayang Jenis untuk Tatasusunan Objek?

Patricia Arquette
Lepaskan: 2024-10-18 07:02:03
asal
801 orang telah melayarinya

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>
Salin selepas log masuk

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
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana Mengendalikan Pembayang Jenis untuk Tatasusunan Objek?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!