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
}
}
}
?>