Наследование — хорошо зарекомендовавший себя принцип программирования, и PHP использует этот принцип в своей объектной модели. Этот принцип повлияет на то, как многие классы и объекты соотносятся друг с другом.

Например, при расширении класса подкласс наследует все общедоступные и защищенные методы, свойства и константы родительского класса. Если класс не переопределит эти методы, они сохранят свою первоначальную функциональность.

Это полезно для определения и абстрагирования функций и позволяет реализовать дополнительные функции в аналогичных объектах без необходимости повторной реализации всех общих функций.

Частные методы родительского класса недоступны для дочернего класса. В результате дочерние классы могут сами переопределять закрытый метод без учета обычных правил наследования. finalОднако до версии PHP 8.0.0 static к приватным методам применялись ограничения. Начиная с PHP 8.0.0, единственным принудительным ограничением частного метода являются private finalконструкторы, так как это распространенный способ «отключить» конструктор при использовании вместо него статических фабричных методов.

Видимость методов , свойств и констант можно уменьшить, например, protectedметод можно пометить как public, но нельзя ограничить, например, пометив publicсвойство как private.

Примечание :

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

Примечание :

Не допускается переопределять свойство для чтения-записи свойством только для чтения или наоборот.

<?php

class A {
    public int $prop;
}
class B extends A {
    // Illegal: read-write -> readonly
    public readonly int $prop;
}
?>

Пример #1 Пример наследования

<?php

class Foo
{
    public function printItem($string)
    {
        echo 'Foo: ' . $string . PHP_EOL;
    }
    
    public function printPHP()
    {
        echo 'PHP is great.' . PHP_EOL;
    }
}

class Bar extends Foo
{
    public function printItem($string)
    {
        echo 'Bar: ' . $string . PHP_EOL;
    }
}

$foo = new Foo();
$bar = new Bar();
$foo->printItem('baz'); // Output: 'Foo: baz'
$foo->printPHP();       // Output: 'PHP is great' 
$bar->printItem('baz'); // Output: 'Bar: baz'
$bar->printPHP();       // Output: 'PHP is great'

?>