Заміна успадкованих методів і властивостей

 

Для того, щоб замінити успадкований метод батьківського класу в новому класі, необхідно просто замінити цей метод в новому класі. При цьому необхідно використовувати те ж ім'я, яке було в батьківському класі:

<? Php 

class MyClass 
{ 
public $prop1 = "Я метод класу!"; 

public function __construct () 
{ 
echo 'Клас "', __CLASS__, '" було створено!'; 
} 

public function __destruct () 
{ 
echo 'Клас "', __CLASS__, '" було знищено.'; 
} 

public function __toString () 
{ 
echo "Використовуємо метод toString:"; 
return $this-> getProperty (); 
}
public function setProperty ($newval) 
{ 
$this-> prop1 = $newval; 
}
public function getProperty () 
{ 
return $this-> prop1. ""; 
} 
} 
class MyOtherClass extends MyClass 
{ 
public function __construct () 
{ 
echo "Новий конструктор в ". __CLASS__. "."; 
} 

public function newMethod () 
{ 
echo "Із нового методу ". __CLASS__. "."; 
} 
} 

// Створення об'єкта 
$newobj = new MyOtherClass; 

// Виводимо об'єкт 
echo $newobj-> newMethod (); 

// Використання методу батьківського класу 
echo $newobj-> getProperty (); 

?>

У результаті ми отримаємо: 
Новий конструктор MyOtherClass. 
З нового методу MyOtherClass. 
Я властивість класу! 
Клас "MyClass" було знищено.

Існують ситуації, коли необхідно замінивши метод у новому класі, викликати цей же метод, але тільки в батьківському класі. У таких випадках використовується оператор parent::

Приклад:

<? Php 

class MyClass 
{ 
public $prop1 = "Я властивість класу!"; 

public function __construct () 
{ 
echo 'Клас "', __CLASS__, '" було створено!'; 
} 

public function __destruct () 
{ 
echo 'Клас "', __CLASS__, '" було знищено.'; 
} 

public function __toString () 
{ 
echo "Using the toString method:"; 
return $this-> getProperty (); 
} 

public function setProperty ($newval) 
{ 
$this-> prop1 = $newval; 
} 

public function getProperty () 
{ 
return $this-> prop1. ""; 
} 
} 

class MyOtherClass extends MyClass 
{ 
public function __construct () 
{ 
parent:: __construct (); // Виклик конструктора батьківського класу 
echo "Новий конструктор". __CLASS__. "."; 
} 

public function newMethod () 
{ 
echo "З нового методу класу". __CLASS__. "."; 
} 
} 

// Створюємо об'єкт 
$ Newobj = new MyOtherClass; 

// Виводимо об'єкт 
echo $newobj-> newMethod (); 

// Використання методу батьківського класу 
echo $ newobj-> getProperty (); 

?>

У результаті у вікні браузера можна спостерігати:

Коас "MyClass" було створено! 
Новий конструктор в MyOtherClass. 
З нового методу в MyOtherClass. 
Я властивість класу! 
Клас "MyClass" було знищено.