Наследование — хорошо зарекомендовавший себя принцип программирования, и 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'
?>
0 комментариев