К трем основным функциям объектно-ориентированного программирования относятся инкапсуляция, наследование и полиморфизм. При программировании вам может потребоваться использовать определенный код несколько раз, а использование наследования сокращает повторение перезаписи кода вручную за счет повторного использования кода. Наследование – это метод создания нового класса путем наследования базового класса. Объект нового класса сможет получить доступ ко всем членам класса нового класса, а также к базовому классу посредством наследования. Таким образом, один и тот же код можно использовать многократно, написав его только один раз. PHP использует расширить ключевое слово для наследования. В этом руководстве показано, как реализовать наследование с помощью сценария PHP.
Синтаксис наследования показан ниже.
Class newClass extends oldClass { ... }
Здесь newClass называется дочерним, производным или подклассом; а oldClass называется родительским, базовым или суперклассом. В следующей части этой статьи показаны некоторые примеры использования наследования в PHP.
Следующий сценарий показывает простое использование наследования в сценарии PHP. В сценарии Employee – это родительский класс, содержащий две переменные класса, а метод setData() используется для инициализации переменных класса. Исполнительный класс дочерний класс, который наследуется от класса Employee, используя расширения ключевых слов. Он содержит одну переменную класса и метод с именем showDetails() для печати переменных класса родительского и дочернего классов. После создания объекта дочернего класса методы родительского и дочернего классов будут вызываться с использованием объекта дочернего класса.
<?php //Родительский класс class Employee{//Переменные родительского класса public $name; public $department;//Инициализация базовых данных public function setData() { $this->name = "Max Destroyer"; $this->department = "HR"; } }//Дочерний класс class Executive extends Employee{ //Переменная дочернего класса public $designation = "Marketing Executive"; //Печать сведений о сотруднике public function showDetails() { if($this->name != "" && $this->designation != "" && $this->department != "") { echo "<b>Сведения о сотруднике: </b><br/>"; echo "Имя: ".$this->name."<br/>"; echo "Назначение: ".$this->designation."<br/>"; echo "Отдел: ".$this->department."<br/>"; } } } //Создать объект Дочерний класс $objEmp=new Executive(); //Вызвать метод Родительского класса $objEmp->setData(); //Вызвать метод Дочернего класса $objEmp->showDetails(); ?>
Результат
Следующий вывод появится после запуска скрипта. Здесь имя сотрудника и значения отдела печатаются из родительского класса, а значение назначения сотрудника печатается из дочернего класса.
Переопределение метода происходит, когда метод с тем же именем объявлен как в родительском, так и в дочернем классе. Следующий сценарий демонстрирует наследование с переопределением метода с помощью сценария PHP. Здесь метод showDetails() объявлен как в родительском, так и в дочернем классах. Объект родительского класса получит доступ к методу showDetails() родительского класса, а объект дочернего класса получит доступ к методу showDetails() дочернего класса.
<?php //Родительский класс class Employee{//Переменные родительского класса public $name; public $department;//Инициализация данных function __construct() { $this->name = "Andrey Ex"; $this->department = "Sales"; } //Печать сведений о сотруднике public function showDetails() { echo "<b>Сведения о сотруднике:[Из родительского класса] </b><br/>"; echo "Имя: ".$this->name."<br/>"; echo "Отдел: ".$this->department."<br/><br/>"; } }//Дочерний класс class Executive extends Employee{ //Переменная дочернего класса public $designation = "Sales Executive"; //Печать сведений о сотруднике public function showDetails() { echo "<b>Сведения о сотруднике:[Из Дочернего класса] </b><br/>"; echo "Имя: ".$this->name."<br/>"; echo "Обозначение: ".$this->designation."<br/>"; echo "Отдел: ".$this->department."<br/>"; } } //Создать объект Родительского класса $objEmployee=new Employee(); //Вызвать метод Родительского класса $objEmployee->showDetails(); //Создать объект Дочернего класса $objExecutive=new Executive(); //Вызвать метод Дочернего класса $objExecutive->showDetails(); ?>
Результат
Следующий вывод появится после запуска скрипта. Когда метод showDetails() вызывается с объектом родительского класса, он показывает выходные данные родительского класса. Когда метод showDetails() вызывается с объектом дочернего класса, он показывает вывод дочернего класса.
Когда и родительский, и дочерний классы содержат метод конструктора, дочерний класс может вызывать конструктор родительского класса. В следующем сценарии показано, как вызвать конструктор родительского класса из конструктора дочернего класса. Оператор parent :: __ construct () используется для вызова родительского конструктора.
<?php //Родительский класс class Employee{//Переменные Родительского класса public $name; public $department;//Инициализация данных function __construct($name,$dept) { $this->name = $name; $this->department = $dept; } }//Дочерний класс class Executive extends Employee{ //Переменные Дочернего класса public $designation; public $salary; //Инициализация данных function __construct($name,$department,$designation,$salary) { //Вызвать объект Родительского класса parent:: __construct($name,$department); $this->designation = $designation; $this->salary = $salary; } //Печать сведений о сотруднике public function showDetails() { echo "<b>Сведения о сотруднике:</b><br/>"; echo "Имя: ".$this->name."<br/>"; echo "Назначение: ".$this->designation."<br/>"; echo "Отдел: ".$this->department."<br/>"; echo "Зарплата: $".$this->salary."<br/>"; } } //Создать объект Дочернего класса $objExecutive=new Executive('Andrey Ex','Marketing','Marketing Executive',78000); //Вызвать метод Дочернего класса $objExecutive->showDetails(); ?>
Результат
Следующий вывод появится после запуска скрипта. Здесь имя сотрудника и отдел инициализируются родительским конструктором, а назначение и зарплата сотрудника инициализируются дочерним конструктором.
Следующий сценарий показывает, как реализовать иерархическое наследование в PHP. Здесь class2 создается путем наследования class1, а class3 создается путем наследования class2. В этом примере три метода определены в трех классах. Объект class3 создается для вызова методов всех классов.
<?php //Родительский класс class class1{function showMethod1() { echo "<font color='red' size='5px'>Это Родительский класс</font><br/>"; } }//Дочерний класс class class2 extends class1{function showMethod2() { echo "<font color='green' size='4px'>Это Дочерний класс</font><br/>"; } } //Большой Дочерний класс class class3 extends class2{ function showMethod3() { echo "<font color='blue' size='2px'>Это большой Дочерний класс</font>"; } } $object = new class3(); $object->showMethod1(); $object->showMethod2(); $object->showMethod3(); ?>
Результат
Следующий вывод появится после запуска скрипта. Здесь первая строка текста появилась из class1, вторая строка текста появилась из class2, а третья строка текста появилась из class3.
В этой статье показано несколько различных типов наследования с использованием сценария PHP. Прочитав эту статью, вы должны понять концепцию наследования и его основные способы использования в сценарии PHP.