echo("Price: " . $this->price . "<br>");
echo("Rating: " . $this->rating . '4br>"i;
}
// другие методы
}
?>
Теперь у нас есть базовый класс, и мы можем воспользоваться ключевым словом extends, чтобы унаследовать свойства класса Media, а также добавить какие-либо специфические члены и методы, относящиеся к конкретному типу носителя, такому как фильм или книга. Специализированный класс, порожденный от родительского, называется дочерним, или подклассом. Вот подкласс Book класса Media. Остальные классы можно реализовать аналогичным образом.
Хороший прием - деление класса на подтипы, исходя из члена класса, который обусловливает значительное ветвление кода программы, как поле type в нашем классе Media, которое вынуждало использовать сложный блок switch. Если вообще исключить поле
<?php
//
class Book extends Media {
var $isbn;
var Sauthor;
var SnumberOfPages;
function Book($id, $name, JinStock, $price, $rating, $isbn, $author, SnumberOfPages)
{
// Важно сначала вызвать конструктор родительского класса, а затем, // после его инициализации, устанавливать члены
$this->Media($id, Sname, $inStock, $price, $rating); $this->isbn = $isbn; $this->author = Sauthor; Sthis->numberOfPages = SnumberOfPages;
}
function display() {
Media: :display();
echo ("ISBN: " . Sthis->isbn. "<br>"),;
echo("Author: " , $this->author. "<br>");
echo("Numberof Pages: " . Sthis->numberOfPages. "<br>");
}
методы
Когда наш класс Book наследует классу Media, он получает все члены и методы класса Media. Чтобы создать новый объект book, мы используем конструктор родительского класса - Media() - и одновременно устанавливаем значения новых членов. Это очень элегантная конструкция, поскольку она избавляет нас от необходимости многократно повторять код для присваивания и особенно логики правил, которая должна поддерживать целостность данных. Например, значение SinStock не должно опускаться меньше 0, а значение $price не должно быть отрицательным. Поместив эту логику в класс Media, мы можем положиться на заложенный фундамент и, основываясь на нем, гарантировать обеспечение одинаковых правил целостности для всех подтипов.
Обратим внимание на метод display () класса Book. Мы предоставили для него новую реализацию, чтобы отобразить объект Book. В этом методе мы выводим члены объекта Media (с помощью операции вызова функции класса, о которой говорится в следующем разделе), а также новые члены $isbn, $author и $numberOfPages. Этот новый метод display() переопределяет (overrides) метод display() базового класса Media.