ЛУЧШИЙ САЙТ ДЛЯ ВЕБ-РАЗРАБОТЧИКОВ

PHP Учебник

PHP СТАРТ PHP Интро PHP Установка PHP Синтаксис PHP Комментарии PHP Переменные PHP Echo / Print PHP Типы данных PHP Строки PHP Числа PHP Математика PHP Константы PHP Операторы PHP If...Else...Elseif PHP Switch PHP Циклы PHP Функции PHP Массивы PHP Суперглобальные PHP RegEx

PHP Формы

PHP Обработка формы PHP Проверка формы PHP Обязательные поля формы PHP Форма URL/E-mail PHP Заполнение формы

PHP Расширенный

PHP Дата и время PHP Подключение файлов PHP Обработка файлов PHP Файл открыть/читать PHP Файл создать/записать PHP Файл Загрузить PHP Куки PHP Сессии PHP Фильтры PHP Расширенные фильтры PHP Callback функции PHP JSON PHP Исключения

PHP ООП

PHP Что такое ООП PHP классы/объекты PHP Конструктор PHP Деструктор PHP Модификаторы доступа PHP Наследование PHP Константы PHP Абстрактные классы PHP Интерфейсы PHP Трейты PHP Статические методы PHP Статические свойства PHP Пространства имён PHP Итерации

MySQL База данных

MySQL База данных MySQL Подключение MySQL Создать БД MySQL Создать таблицы MySQL Вставить данные MySQL Получить последний ID MySQL Вставить несколько записей MySQL Подготовленные инструкции MySQL Выбрать данные MySQL Where MySQL Order By MySQL Удаление данных MySQL Обновление данных MySQL Ограничение данных

PHP XML

PHP XML Парсеры PHP SimpleXML Парсер PHP SimpleXML - Get PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX Интро AJAX PHP AJAX База данных AJAX XML AJAX Живой поиск AJAX Опрос

PHP Примеры

PHP Примеры PHP Компилятор PHP Викторина PHP Упражнения PHP Сертификат

PHP Справочник

PHP Обзор PHP Массив PHP Календарь PHP Дата PHP Каталог PHP Ошибка PHP Исключение PHP Файловая система PHP Фильтр PHP FTP PHP JSON PHP Ключевые слова PHP Libxml PHP Почта PHP Математика PHP Разное PHP MySQLi PHP Сеть PHP Output Control PHP RegEx PHP SimpleXML PHP Поток PHP Строка PHP Обработка переменных PHP XML Парсер PHP Zip PHP Часовые пояса

PHP. Уроки для начинающих

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


PHP - Что такое наследование?

Наследование в ООП = Когда класс наследуется от другого класса.

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

Унаследованный класс определяется с помощью ключевого слова extends (в пер. с анг. - продлить, продолжить).

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

Пример

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  public function intro() {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}

// Strawberry наследуется от Fruit
class Strawberry extends Fruit {
  public function message() {
    echo "Am I a fruit or a berry? ";
  }
}
$strawberry = new Strawberry("Strawberry", "red");
$strawberry->message();
$strawberry->intro();
?>
Попробуйте сами »

Объяснение примера

Класс Strawberry унаследован от класса Fruit.

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

Класс 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 "The fruit is {$this->name} and the color is {$this->color}.";
  }
}

class Strawberry extends Fruit {
  public function message() {
    echo "Am I a fruit or a berry? ";
  }
}

// Попробуйте вызвать все три метода вне класса
$strawberry = new Strawberry("Strawberry", "red");  // OK. __construct() является публичным
$strawberry->message(); // OK. message() является публичным
$strawberry->intro(); // ERROR. 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 "The fruit is {$this->name} and the color is {$this->color}.";
  }
}

class Strawberry extends Fruit {
  public function message() {
    echo "Am I a fruit or a berry? ";
    // Вызовите защищенный метод из производного класса - OK
    $this -> intro();
  }
}

$strawberry = new Strawberry("Strawberry", "red"); // OK. __construct() is public
$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 "The fruit is {$this->name} and the color is {$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 "The fruit is {$this->name}, the color is {$this->color}, and the weight is {$this->weight} gram.";
  }
}

$strawberry = new Strawberry("Strawberry", "red", 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() {
    // какой-то код
  }
}
?>
Попробуйте сами »