Аргерих Л. О языке РНР. Часть 1. Страница 101


echo("Price: " . $this->price . "<br>");

echo("Rating: " . $this->rating . '4br>"i;

}

// другие методы

}

?>

Теперь у нас есть базовый класс, и мы можем воспользоваться ключевым словом extends, чтобы унаследовать свойства класса Media, а также добавить какие-либо специфические члены и методы, относящиеся к конкретному типу носителя, такому как фильм или книга. Специализированный класс, порожденный от родительского, называется дочерним, или подклассом. Вот подкласс Book класса Media. Остальные классы можно реализовать аналогич­ным образом.

Хороший прием - деление класса на подтипы, исходя из члена класса, который обусловливает значительное ветвление кода программы, как поле type в на­шем классе Media, которое вынуждало использовать сложный блок switch. Ес­ли вообще исключить поле type и создавать классы в зависимости от типа носителя, можно существенно уменьшить сложность логики приложения.

<?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 не должно быть отрицательным. Поместив эту логику в класс Me­dia, мы можем положиться на заложенный фундамент и, основываясь на нем, гарантировать обеспечение одинаковых правил целостности для всех подтипов.

Обратим внимание на метод display () класса Book. Мы предоставили для него новую реализацию, чтобы отобразить объект Book. В этом методе мы выво­дим члены объекта Media (с помощью операции вызова функции класса, о ко­торой говорится в следующем разделе), а также новые члены $isbn, $author и $numberOfPages. Этот новый метод display() переопределяет (overrides) метод display() базового класса Media.




На сегодняшний день услуга доставка машин пользуется огромной популярностью. А если доверить такую работу в профессиональные руки, тогда вам не придется беспокоится о надежности перевозки и качественном хранении вашего автомобиля.