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

В PHP ООП наследование является фундаментальным принципом. Наследование влияет на то, как объекты соотносятся друг с другом. С его помощью мы можем создавать объекты, которые чем-то похожи, а в некоторых аспектах отличаются друг от друга.

Благодаря ему не нужно заново определять методы, мы просто наследуем их от суперкласса, а затем добавляем в подкласс еще несколько методов по необходимости и используем его.

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

Допустим, у нас есть класс с именем person. Он имеет несколько атрибутов или свойств. Теперь, если мы наследуем класс worker от базового класса person, мы можем сказать, что worker является person. worker будет иметь все свойства person, а также дополнительные свойства. person - это суперкласс, а worker - это подкласс. person и worker будут иметь общие характеристики и методы.

При определении класса worker мы наследуем его от класса person. В результате нам не нужно снова определять свойства и методы класса, все наследуется по умолчанию. Это экономит время, нам не приходится снова писать один и тот же код.

Вот ООП PHP пример:

class Person {
            public $name;
            public $age;
 
            public function getName() {
                        return $this->name;
            }
}
 
class worker extends Person {
            public $worker_id;
            public $record_date;
 
            public getWorkerId() {
                        return $this->worker_id;
            }
 
            public getWorkerName() {
                        return $this->getName();// getName() уже содержится в Person
            }
}

В этом коде класс Person является базовым классом, а класс Worker - подклассом. Класс Worker может использовать метод getName(). Он был доступен в классе Person. Но так как класс Worker унаследовал его, то он может использовать этот метод.

Наследование является одним из способов, с помощью которых все свойства суперкласса наследуются подклассом, но свойства подклассов не наследуются в суперкласс. Наследование более ярко демонстрирует ООП PHP в действии. Так как это помогает расширить класс свойствами, унаследованными от родительского класса.

Переопределение функции при наследовании

Переопределение означает, что функции имеют одинаковые имена, но разный функционал. При наследовании в PHP, если дочерний класс определяет функцию с тем же именем, что и в родительском классе, она имеет приоритет над этой функцией. Это означает, что если функция наследуется от родительского класса, она может быть изменена в соответствии с конкретными требованиями:

<?php 
class Livingthings { 
    var $name='Living things'; 

    function disp() { 
        echo $this->name; 
    } 
} 

class Animals extends LivingThings { 
    var $name='Animals'; 
} 

class Horse extends Animals { 
    var $name='Horse'; 
} 

$myclass = new Horse() ; 
$Horse->disp(); // Этот код выведет Horse
?>

Наследование в PHP и модификаторы доступа

В основах ООП PHP модификаторы доступа используются для контроля доступа из-за пределов класса к свойствам и методам-членам. Видимость данных и методов является очень важным аспектом, и для ограничения доступа к членам класса используются три модификатора доступа. Когда свойство или метод объявляются как статические, они могут быть вне конкретного класса.

Открытые члены

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

Частные члены

Когда член объявлен, как privat, он доступен только в классе, в котором он был объявлен. Он не доступен из подклассов или из-за пределов класса.

Защищенные члены

В ООП PHP, когда свойство или метод объявляются защищенными, это означает, что они доступны в классе, в котором они были объявлены, а также из его подклассов. Но они не доступны вне пределов этого класса. Любое свойство или метод могут быть защищены с помощью ключевого слова protected, размещенного перед его именем.