Меню
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON PHP КАК
     ❯   

PHP Учебник


PHP Формы


PHP Продвинутый


PHP ООП


MySQL База данных


PHP XML


PHP - AJAX


PHP Примеры


PHP Справочник



PHP ООП - Наследование



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

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

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

Наследуемый класс определяется с помощью ключевого слова extends.

В следующем примере класс Strawberry наследуется от класса Fruit. Это означает, что класс Strawberry может использовать публичные свойства $name и $color, а также публичные методы __construct() и intro() из класса Fruit (благодаря наследованию). Класс Strawberry также имеет собственный метод message():

Пример

<?php
// Родительский класс
class Fruit {
  public $name;
  public $color;

  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }

  public function intro() {
    echo "Фрукт - $this->name и цвет - $this->color.<br>";
  }
}

// Strawberry наследуется от Fruit
class Strawberry extends Fruit {
  public function message() {
    echo "Я фрукт или ягода? ";
  }
}

$strawberry = new Strawberry("Клубника", "красный");
$strawberry->intro();
$strawberry->message();
?>
Попробуйте сами »


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

В предыдущей главе мы узнали, что protected свойства или методы могут быть доступны внутри класса и в классах, производных от этого класса. Что это значит?

Давайте рассмотрим пример:

Пример

<?php
class Fruit {
  public $name;
  public $color;

  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }

  protected function intro() {
    echo "Фрукт - $this->name и цвет - $this->color.";
  }
}

class Strawberry extends Fruit {
  public function message() {
    echo "Я фрукт или ягода? ";
  }
}

// Попытка вызвать все три метода извне класса
$strawberry = new Strawberry("Клубника", "красный");  // OK. __construct() публичный
$strawberry->message(); // OK. message() публичный
$strawberry->intro(); // ОШИБКА. intro() защищенный
?>
Попробуйте сами »

В примере выше мы видим, что если мы попытаемся вызвать protected метод (intro()) извне класса, мы получим ошибку.

public метод будет работать отлично!

Давайте рассмотрим другой пример:

Пример

<?php
class Fruit {
  public $name;
  public $color;

  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }

  protected function intro() {
    echo "Фрукт - $this->name и цвет - $this->color.";
  }
}

class Strawberry extends Fruit {
  public function message() {
    echo "Я фрукт или ягода? ";
    // Вызов защищенного метода из производного класса - OK
    $this -> intro();
  }
}

$strawberry = new Strawberry("Клубника", "красный"); // OK. __construct() публичный
$strawberry->message(); // OK. message() публичный и вызывает intro() (который защищен) изнутри производного класса
?>
Попробуйте сами »

В примере выше мы видим, что все работает отлично! Это потому, что мы вызываем protected метод (intro()) изнутри производного класса.


PHP - Переопределение унаследованных методов

Унаследованные методы могут быть переопределены путем повторного определения методов (с тем же именем) в дочернем классе.

Посмотрите на пример ниже. Методы __construct() и intro() в дочернем классе (Strawberry) переопределят методы __construct() и intro() в родительском классе (Fruit):

Пример

<?php
class Fruit {
  public $name;
  public $color;

  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }

  public function intro() {
    echo "Фрукт - $this->name и цвет - $this->color.";
  }
}

class Strawberry extends Fruit {
  public $weight;

  public function __construct($name, $color, $weight) {
    $this->name = $name;
    $this->color = $color;
    $this->weight = $weight;
  }

  public function intro() {
    echo "$this->name имеет цвет $this->color, а вес составляет $this->weight грамм.";
  }
}

$strawberry = new Strawberry("Клубника", "красный", 50);
$strawberry->intro();
?>
Попробуйте сами »

PHP - Ключевое слово final

Ключевое слово final может использоваться для предотвращения наследования класса или предотвращения переопределения метода.

Следующий пример показывает, как предотвратить наследование класса:

Пример

<?php
final class Fruit {
  // некоторый код
}

// приведет к ошибке
class Strawberry extends Fruit {
  // некоторый код
}
?>
Попробуйте сами »

Следующий пример показывает, как предотвратить переопределение метода:

Пример

<?php
class Fruit {
  final public function intro() {
    // некоторый код
  }
}

class Strawberry extends Fruit {
  // приведет к ошибке
  public function intro() {
    // некоторый код
  }
}
?>
Попробуйте сами »


×

Связаться с отделом продаж

Если вы хотите использовать услуги schoolsw3 как образовательное учреждение, команда или предприятие, отправьте нам электронное письмо:
sales@schoolsw3.com

Сообщить об ошибке

Если вы хотите сообщить об ошибке или внести предложение, отправьте нам электронное письмо:
help@schoolsw3.com

Schoolsw3 оптимизирован для обучения и подготовки. Примеры могут быть упрощены для улучшения чтения и обучения. Учебники, ссылки и примеры постоянно проверяются, чтобы избежать ошибок, но мы не можем гарантировать полную правильность всего контента.
При использовании Schoolsw3 вы соглашаетесь прочитать и принять наши условия использования,
политику использования файлов cookie и конфиденциальности.

Авторское право 1999- © Copyright. Все права защищены. Schoolsw3 работает на SW3.CSS.