popov . dev

Main

Library

Articles

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

Наследование 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 в вашем классе.

Comments

In order to leave your opinion, you need to register on the website