⊗ppOpIhPPP 33 of 107 menu

PHP'de Kalıtım Sırasında Özel Özelliklerin Sorunu

Özel özelliklerin kalıtılmaması, beklenmedik bir soruna yol açabilir. Bir örnek üzerinden inceleyelim. Şu özel özelliğe sahip ebeveyn sınıfımız olduğunu varsayalım:

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

Diyelim ki alt sınıfta, yaşı bir artıran bir metod oluşturmak istedik. Ancak, ebeveynin özel özelliğini değiştirme girişimi bir hataya yol açacaktır:

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

Alt sınıfta özel özellik $age tanımlanırsa hata kaybolur:

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

İşte tam burada bir tuzak bizi bekliyor! Aslında iki özel özellik oluşturduk: biri ebeveynde, diğeri alt sınıfta. Ve bunlar tamamen bağımsız çalışır. Bu, ebeveyn metodlarının kendi özelliklerini, alt sınıf metodlarının ise kendi özelliklerini değiştireceği anlamına gelir.

Bu sorunun aslında bir çözümü var. Sadece ebeveynin özel özellikleri, ebeveynin metodları aracılığıyla yönetilmelidir. Kodumuzu buna göre yeniden yazalım:

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

Basitleştirilebilir:

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

Aşağıdaki kodda, alt sınıfta ebeveyn metodu geçersiz kılınıyor. Bu koddaki sorunları düzeltin:

<?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; // hata } } } ?>
Türkçe
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenЎзбекOʻzbekTiếng Việt
Web sitesinin çalışması, analiz ve kişiselleştirme için çerezleri kullanıyoruz. Veri işleme, Gizlilik Politikası'na uygun olarak gerçekleşir.
tümünü kabul et özelleştir reddet