⊗ppOpIhPPP 33 of 107 menu

Masalah Sifat Persendirian dalam Pewarisan OOP dalam PHP

Hakikat bahawa sifat persendirian tidak diwarisi boleh membawa kepada masalah yang tidak dijangka. Mari kita lihat contoh. Katakan kita ada kelas induk berikut dengan sifat persendirian:

<?php class User { private $age; public function setAge($age) { $this->age = $age; } public function getAge() { return $this->age; } } ?>

Katakan dalam kelas anak kita ingin mencipta metode yang akan menambah usia sebanyak satu. Walau bagaimanapun, percubaan untuk mengubah sifat persendirian induk akan menyebabkan ralat:

<?php class Student extends User { public function incAge() { $this->age++; // ralat } } ?>

Ralat akan hilang jika dalam kelas anak diisytiharkan sifat persendirian $age:

<?php class Student extends User { private $age; public function incAge() { $this->age++; } } ?>

Di sinilah kita menghadapi perangkap! Sebenarnya, kita telah menghasilkan dua sifat persendirian: satu dalam induk dan satu dalam anak. Dan kedua-duanya berfungsi sepenuhnya secara berasingan. Ini bermakna metode induk akan mengubah sifatnya sendiri, dan metode anak - sifatnya sendiri.

Masalah ini sebenarnya mempunyai penyelesaian. Kita hanya perlu memanipulasi sifat persendirian induk melalui metode induk itu sendiri. Mari kita tulis semula kod kita menurut ini:

<?php class Student extends User { public function incAge() { $age = $this->getAge(); $age++; $this->setAge($age); } } ?>

Boleh dipermudahkan:

<?php class Student extends User { public function incAge() { $this->setAge($this->getAge() + 1); } } ?>

Dalam kod berikut, dalam kelas anak, metode induk diubah suai. Betulkan masalah dalam kod ini:

<?php class User { private $name; public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } } class Employee extends User { public function setName($name) { if (strlen($name) > 0) { $this->name = $name; // ralat } } } ?>
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