⊗ppOpIfAp 68 of 107 menu

Penggunaan Antara Muka dalam OOP dalam PHP

Jadi, kita telah mengetahui bahawa antara muka adalah cara yang baik untuk mengawal bahawa semua kaedah kelas yang diperlukan telah dilaksanakan.

Mari kita lihat satu lagi contoh yang lebih praktikal. Katakan kita mempunyai kelas yang akan menyimpan pelbagai objek bentuk:

<?php class FiguresCollection { private $figures = []; // array untuk bentuk } ?>

Mari kita laksanakan kaedah addFigure dalam kelas kita untuk menambahkan objek ke dalam koleksi:

<?php class FiguresCollection { private $figures = []; // Objek dengan bentuk dihantar sebagai parameter: public function addFigure($figure) { $this->figures[] = $figure; } } ?>

Jelas sekali, kita menjangkakan bahawa parameter kaedah addFigure akan menghantar objek dengan bentuk. Namun, tiada sebarang kawalan ke atas ini!

Mari kita gunakan petunjuk untuk jenis dan nyatakan jenis objek secara jelas sebagai Figure:

<?php class FiguresCollection { private $figures = []; public function addFigure(Figure $figure) { $this->figures[] = $figure; } } ?>

Mari kita fahami apa yang telah kita lakukan.

Jika Figure adalah kelas yang benar-benar wujud, maka kita boleh menghantar objek kelas tersebut, dan juga pewarisnya, ke dalam parameter kaedah.

Bagaimanapun, bagi kami, Figure adalah antara muka. Dalam kes ini, petunjuk menunjukkan bahawa hanya objek kelas yang melaksanakan antara muka kami boleh dihantar sebagai parameter kaedah.

Mari kita cuba mencipta objek kelas kami dan menambahkan bentuk ke dalamnya:

<?php $figuresCollection = new FiguresCollection; // Tambahkan beberapa segi empat sama: $figuresCollection->add(new Quadrate(2)); $figuresCollection->add(new Quadrate(3)); // Tambahkan beberapa segi empat tepat: $figuresCollection->add(new Rectangle(2, 3)); $figuresCollection->add(new Rectangle(3, 4)); ?>

Cuba menambahkan objek kelas lain akan menyebabkan ralat:

<?php $figuresCollection = new FiguresCollection; class Test {}; // beberapa kelas lain $figuresCollection->add(new Test); // akan menghasilkan ralat ?>

Apa yang praktikalnya diberikan oleh kawalan sedemikian kepada kami: kerana semua bentuk yang ditambahkan ke dalam koleksi melaksanakan antara muka Figure, kami boleh yakin bahawa setiap satu daripadanya akan mempunyai kaedah getSquare dan kaedah getPerimeter.

Mungkin pada masa hadapan selain segi empat sama dan segi empat tepat akan wujud, contohnya, segi tiga. Dalam kes ini, segi tiga juga akan mempunyai kaedah getSquare dan getPerimeter.

Secara praktikal, ini memberikan kami perkara berikut: kami boleh dalam kelas FiguresCollection membuat, contohnya, kaedah getTotalSquare, yang mencari jumlah luas bentuk koleksi. Dalam kaedah ini kami akan mengulangi array bentuk dengan gelung dan setiap bentuk memanggil kaedah getSquare.

Oleh kerana setiap bentuk melaksanakan antara muka Figure, kami boleh 100% yakin bahawa setiap bentuk akan mempunyai kaedah getSquare ini.

Jadi, berikut adalah pelaksanaan kaedah:

<?php class FiguresCollection { private $figures = []; public function addFigure(Figure $figure) { $this->figures[] = $figure; } // Cari jumlah luas: public function getTotalSquare() { $sum = 0; foreach ($this->figures as $figure) { $sum += $figure->getSquare(); // gunakan kaedah getSquare } return $sum; } } ?>

Tanpa mengintip kod saya, laksanakan kelas FiguresCollection yang sama.

Tambahkan kaedah getTotalPerimeter ke dalam kelas FiguresCollection untuk mencari jumlah perimeter semua bentuk.

Melayu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Kami menggunakan kuki untuk operasi laman web, analisis dan personalisasi. Pemprosesan data dijalankan mengikut Polisi Kerahsiaan.
terima semua tataletak tolak