@Kosteash, ещё нюанс, ты неправильно описываешь параметры своего класса. правильно - это чтобы твой класс _расширял_ интерфейс родительского класса, но не изменял.
пример:
class Animal { // некий класс, реализующий некую функциональность
function __construct($name){
$this->name = $name;
}
function respondToName($name){
return $name === $this->name; // отзывается на кличку
}
function voice(){
return null; // прототип жывотного не издаёт звуков
}
}
$my_animal = new Animal('Charlie'); // объект ведёт себя как инстанс класса Animal
if ($my_animal->respondToName('Charlie')){
$my_animal->voice(); // и делает то, что нам нужно
}
// мы решили улучшить базовый класс и расширили его своим.
class Dog extends Animal {
function __construct($name, $color = 'black'){
parent::__construct($name);
$this->color = $color;
}
function voice(){
return 'Gav-gav!';
}
}
// новый класс должен быть реализован так, что когда мы подставим его в прежний код - он не вызовет несовместимости интерфейсов
$my_animal = new Dog('Charlie'); // как передавали первым аргументом кличку животного, так и передаём, код не ломается
if ($my_animal->respondToName('Charlie')){
$my_animal->voice(); // и делает то, что нам нужно
}