Главная » PHP - FAQ » Основы PHP8 » Наследование класса в PHP
14 0  

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

Классы могут наследовать методы и свойства другого класса. Класс, который наследует методы и свойства, называется подкласс. Класс, который наследует подкласс, называется родительский класс.


Наследование достигается при помощи ключевого слова extends.


<?php
class Animal {
    public $name;
    public function hi() {
        echo "Hi from Animal";
    }
}
class Dog extends Animal {
}

$d = new Dog();
$d->hi();

?>

*Здесь класс Dog наследуется из класса Animal. Поэтому, все свойства и методы Animal доступны объектам Dog.


Родительские конструкторы не вызываются косвенно, если подкласс определяет конструктор. Однако если дочерний класс не определяет конструктор, он будет наследоваться из родительского класса, если он не объявлен закрытым (private).

Обратите внимание, что все наши свойства и методы обладают общедоступной (public) областью видимости.

Для дополнительного контроля над объектами объявите методы и свойства при помощи ключевого слова области видимости. Таким образом, вы контролируете, как и откуда свойства и методы могут быть получены.

Переходите к следующему уроку, чтобы узнать больше об области видимости.


Область видимости в PHP

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

До сих пор мы использовали ключевое слово public, чтобы указать, что свойство/метод доступны из любого места.

Существует еще два ключевых слова для объявления области видимости:

protected: Делает члены доступными только внутри самого класса путем наследования от родительских классов.

private: Делает члены доступными только для класса, который определяет их.

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


Защищенные члены (protected) используются при наследовании.

Закрытые члены (private) используются только внутри класса.


Интерфейсы PHP

Интерфейс определяет список методов, которые класс должен выполнять. Однако интерфейс сам по себе не содержит выполнение методов. Это важный аспект интерфейса, поскольку он позволяет управлять методом по-разному в каждом классе, который использует интерфейс.

Ключевое слово interface определяет интерфейс.

Ключевое слово implements используется в классе для выполнения интерфейса.

Например, AnimalInterface задается с помощью объявления для функции makeSound(), но он не выполняется до его использования в классе:

<?php
interface AnimalInterface {
    public function makeSound();
}

class Dog implements AnimalInterface {
    public function makeSound() {
        echo "Woof! <br />";
    }
}
class Cat implements AnimalInterface {
    public function makeSound() {
        echo "Meow! <br />";
    }
}

$myObj1 = new Dog();
$myObj1->makeSound();

$myObj2 = new Cat();
$myObj2->makeSound();
?>

Класс может выполнять множество интерфейсов. Более одного интерфейса можно обозначать, разделив их запятыми. Например:


class Demo implements AInterface, BInterface, CInterface {

  // Functions declared in interfaces must be defined here

}

Интерфейс может наследовать другой интерфейс при помощи ключевого слова extends.

Все методы, приведенные в интерфейсе, требуют общедоступной области видимости.


Абстрактные классы в PHP

Абстрактные классы могут наследоваться, но не могут быть инстанцированы.

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


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


Ключевое слово abstract используется для создания абстрактного класса или абстрактного метода.

<?php
abstract class Fruit { 
    private $color; 
    
    abstract public function eat(); 
    
    public function setColor($c) { 
        $this->color = $c; 
    } 
} 

class Apple extends Fruit {
    public function eat() {
        echo "Omnomnom";
    }
}

$obj = new Apple();
$obj->eat();
?>


Абстрактные функции могут присутствовать только в абстрактном классе.

Оставить свой комментарий:

Опыт в веб разработке:

2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
1979
2021