Наследование на примере PHP
Данный материал предоставлен сайтом
PacificSky.Ru исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
Дочерние классы наследуют методы и свойства родительских классов. Все, кроме private.
Основываясь на всем этом, напишем класс для выставления оценок в школе.
Класс будет маленький, только для общего представления о наследовании.
Не будем обращать внимание, что оценка выставляется сразу целому классу, а не конкретному ученику. На самом деле мне было лень писать что-то большее. Да и вам так понятнее будет.
Сразу скажу, что в коде есть русский язык. По этому мне понадобилось добавить такой кусочек кода для нормальной работы.
Если кому то более интересно, стоит почитать про поддержку русского языка средствами PHP.
И так приступим:
<?php
header("Content-Type: text/html; charset=UTF-8");
abstract class Assessment
{
protected $assessment; // Оценка
const BEASTLY = 1; // Ужасно, отвратительно
const BAD = 2; // Плохо
const SATISFACTORY = 3; //Удовлетворительно
const GOOD = 4; // Хорошо
const EXCELLENT = 5; // Великолепно
// Конструктор
function __construct($assessment) {
$this->assessment = $assessment;
}
// Полученая оценка
function cost() {
switch ($this->assessment) {
case self::BEASTLY :
return 1;
break;
case self::BAD :
return 2;
break;
case self::SATISFACTORY :
return 3;
break;
case self::GOOD :
return 4;
break;
case self::EXCELLENT :
return 5;
break;
default :
return 3;
}
}
// Текст, описывающий полученую оценку
function stringType() {
switch ($this->assessment) {
case self::BEASTLY :
return "Единица. Ужасно!";
break;
case self::BAD :
return "Два, очень плохо!";
break;
case self::SATISFACTORY :
return "Три, удовлетворительно!";
break;
case self::GOOD :
return "Четыре, хорошо!";
break;
case self::EXCELLENT :
return "Пять, великолепно!";
break;
default :
return "Три, удовлетворительно!";
}
}
}
// Первый А класс
class First_a extends Assessment
{
//Специфические реализации для класса
}
// Первый B класс
class First_b extends Assessment
{
//Специфические реализации для класса
}
// Вывод информации по первому классу
$first_class = new First_a(Assessment::EXCELLENT);
echo $first_class->cost()." ".$first_class->stringType()."<br />\n";
// Вывод информации по второму классу
$second_class = new First_b(Assessment::GOOD);
echo $second_class->cost()." ".$second_class->stringType()."<br />\n";
У нас есть класс Assessment (Оценка).
В нем содержатся константы оценок:
const BEASTLY = 1; // Ужасно, отвратительно
const BAD = 2; // Плохо
const SATISFACTORY = 3; //Удовлетворительно
const GOOD = 4; // Хорошо
const EXCELLENT = 5; // Великолепно
А так-же 2 метода. cost и stringType.
Метод cost возвращает полученную оценку в виде значения.
Метод stringType возвращает описание полученной оценки в виде строки.
В конструктор мы передаем константу, которая нам необходима.
Разберем на пимере первого А класса(Он у нас кстати является дочкой класса Assessment).
class First_a extends Assessment
Идем далее:
$first_class = new First_a(Assessment::EXCELLENT);
echo $first_class->cost()." ".$first_class->stringType()."<br />\n";
Мы создали экземпляр класса First_a (Первый А класс), в который передали Assessment::EXCELLENT оценку, а именно константу EXCELLENT, класса Assessment.
После чего запросили метод cost и stringType.
$first_class->cost()." ".$first_class->stringType()."<br />\n";
Эти методы вернут нам такое значение:
5 Пять, великолепно!
Прошу заметить, что в классе First_a не содержится никакого кода. Все потому, что код и методы берутся из его родительского класса Assessment.
Теперь вы спросите, а
Отвечу. Эта статья была представлена просто как пример наследования. И я бы не старался использовать наследование именно в таких целях! В данном коде к тому же много ненужного дублирования.
Всем спасибо!
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.