Наследование

Наследование — присвоние классу всех методов и свойств другого класса.

Наследовать класс можно через оператор extends.

class ClassParent 
{
    public function getPHPVersion()
    {
        return PHP_VERSION;
    }
}


class ClassChild extends ClassParent {}


$myobj = new ClassChild();
echo $myobj->getPHPVersion(); // 7.4.14

На примере выше видно, что объект ClassChild был создан пустым (без свойств и методов), но при этом он может использовать свойства и методы объекта ClassParent. Это и есть механизм «наследования».

Наследовать можно только один класс.

Классы не могут наследовать свойства и методы, созданные через модификатор private.

Расширить наследуемый метод

Если надо расширить наследуемый метод, то чтобы не писать заново код в дочернем классе, можно воспользоваться ключевым словом parent.

class ClassParent 
{
    public $version;
    
    public function getPHPVersion()
    {
        $this->version = PHP_VERSION;
        return $this->version; // 7.4.14
    }
}

class ClassChild extends ClassParent
{
    public function getPHPVersion()
    {
        // выполняется код наследуемого метода
        parent::getPHPVersion();
        
        return 'Версия PHP '.$this->version; // Версия PHP 7.4.14
    }
}


$myobj = new ClassChild();
echo $myobj->getPHPVersion(); // Версия PHP 7.2.14

Если бы ключевое слово parent не использовался, то метод вернул бы просто «Версия PHP».

Запретить наследовать класс

Чтобы запретить наследовать класс, его надо объявить модификатором final.

final class myObj {}

Проверить, является ли класс дочерним к указанному классу

Проверить, что текущий объект наследуется от указанного класса, можно через функцию is_subclass_of().

class ClassParent {}
class ClassChild extends ClassParent {};

$myobj = new ClassChild();

// Проверить, что $myobj наследует класс ClassParent
is_subclass_of($myobj, 'ClassParent'); // true
is_subclass_of('ClassChild', 'ClassParent'); // true