Наследование PHP классов и ООП
Давайте поговорим о наследовании в PHP. Во-первых, это делается следующим образом:
<?php
class Daddy {
public function my_method() {
echo "Я главный!";
}
}
class Son extends Daddy {
}
$child = new Son;
$child->my_method(); // Выводит "Я главный!" из родительского класса
Дочерний класс - это класс, выполняющий расширение. Родительский класс - это расширяемый класс. И дочерний класс наследует любые общедоступные или защищенные свойства и методы от родительского класса. Вот почему Son не имеет методов, но по-прежнему выводит результаты my_method(). Потому что он унаследовал этот метод от Daddy.
Но частные методы и свойства не наследуются. Таким образом, это не сработает:
<?php
class Daddy {
public function my_method() {
echo "Я главный!";
}
private function you_cant_haz() {
echo "Только Daddy может использовать";
}
}
class Son extends Daddy {
}
$child = new Son;
$child->you_cant_haz(); // Это вызовет ошибку
Вы также можете переопределить унаследованные методы в дочернем элементе. Как в следующем примере:
<?php
class Daddy {
public $var = "Зови меня батя!";
public function my_method() {
echo $this->var;
}
private function you_cant_haz() {
echo "Только Daddy может использовать!";
}
}
class Son extends Daddy {
public $var = "Я сын!";
public function my_method() {
echo $this->var;
}
}
$parent = new Daddy;
$parent->my_method(); // Выводит "Зови меня батя!"
$child = new Son;
$child->my_method(); // Выводит "Я сын!"
Одним из примеров использования этого являются виджеты WordPress. При создании нового виджета ваш индивидуальный класс widget расширяет WP_Widget, чтобы получить доступ к его методам по умолчанию и переопределить их. Затем WordPress совершает магию по объединению вашего виджета, просто переопределяя методы WP_Widget в вашем классе.
Комментарии
Для того чтобы оставить свое мнение, необходимо зарегистрироваться на сайте