⊗ppOpIhPPP 33 of 107 menu

Masalah Properti Privat dalam Pewarisan OOP di PHP

Fakta bahwa properti privat tidak diwariskan dapat menyebabkan masalah yang tidak terduga. Mari kita lihat sebuah contoh. Misalkan kita memiliki kelas induk berikut dengan properti privat:

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

Misalkan dalam kelas turunan kita memutuskan untuk membuat metode yang akan menambah usia sebanyak satu. Namun, upaya untuk mengubah properti privat induk akan menyebabkan kesalahan:

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

Kesalahan akan hilang jika dalam kelas turunan dideklarasikan properti privat $age:

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

Di sinilah jebakan mengintai kita! Sebenarnya, kita menghasilkan dua properti privat: satu di induk dan satu di turunan. Dan keduanya bekerja sepenuhnya independen. Ini berarti bahwa metode induk akan mengubah propertinya sendiri, dan metode turunan - miliknya sendiri.

Masalah ini sebenarnya memiliki solusi. Hanya perlu memanipulasi properti privat induk melalui metode induk itu sendiri. Mari kita tulis ulang kode kita sesuai dengan ini:

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

Dapat disederhanakan:

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

Dalam kode berikut, di kelas turunan metode induk ditimpa. Perbaiki masalah dalam kode 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; // kesalahan } } } ?>
Indonesia
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Kami menggunakan cookie untuk operasi situs, analitik, dan personalisasi. Pemrosesan data dilakukan sesuai dengan Kebijakan Privasi.
terima semua atur tolak