Конструкторы и наследование
<?php
class ShopProduct {
public $title;
public $producerMainName;
public $producerFirstName;
public $price;
function __construct ($title, $firstName, $mainName, $price) { // конструктор
$this -> title = $title; // через $this обращаюсь к свойству этого класса title и присваиваю ему значение (аргумент), которое прилетит в переменную $title, когда вызовется метод конструктора (вызывается при создании нового объекта)
$this -> producerFirstName = $firstName;
$this -> producerMainName = $mainName;
$this -> price = $price;
}
/*
Meтoд __construct ( ) вызывается, когда создается объект с помощью оператора new.
Значения всех перечисленных аргументов передаются конструктору.
Благодаря конструктору, создание экземпляров класса ShopProduct и определение значений их свойств выполняются в одном операторе.
*/
function getProducer () { // метод. возвр. имя и фам автора
return "{$this -> producerFirstName} " .
"{$this -> producerMainName}";
}
function getSummaryLine () { // метод возвращает название альбома (или книги); имя, фамилию автора
$base = "{$this -> title} ( {$this -> producerMainName}, ";
$base .= "{$this -> producerFirstName} )";
return $base;
}
}
/* Класс CDProduct (дочерний) расширяет возможности класса ShopProduct */
class CDProduct extends ShopProduct {
public $playLength;
function __construct ($title, $firstName, $mainName, $price, $playLength) {
parent:: __construct($title, $firstName, $mainName, $price); // Вызвать мeтoд __construct ( ) родительского класса
$this -> playLength = $playLength;
}
function getPlayLength() { // метод. возвращает время звучания
return $this -> playLength;
}
function getSummaryLine () { // метод. возвращает название альбома; имя, фамилию автора и время звучания
$base = "{$this -> title} ( {$this -> producerMainName}, ";
$base .= "{$this -> producerFirstName} )";
$base .= ": Время звучания - {$this -> playLength}";
return $base;
}
}
/* Класс BookProduct (дочерний) расширяет возможности класса ShopProduct */
class BookProduct extends ShopProduct {
public $numPages;
function __construct ($title, $firstName, $mainName, $price, $numPages) {
parent:: __construct ($title, $firstName, $mainName, $price); // все аргументы кроме $numPages обрабатывает родительский конструктор
// каждый дочерний класс вызывает конструктор своего родительского класса, прежде чем определять собственные свойства
$this -> numPages = $numPages;
}
function getNumberOfPages () { // метод. вернуть количество страниц этого ($this) класса
return $this -> numPages;
}
function getSummaryLine () { // метод. возвращает название книги; имя, фамилию автора и количество страниц
$base = "{$this -> title} ( {$this -> producerMainName}, ";
$base .= "{$this -> producerFirstName} )";
$base .= ": {$this -> numPages} стр.";
return $base;
}
}
$productBook = new BookProduct ("Игра престолов", "Мартин", "Джордж", "20 $", 500);
echo $productBook->getSummaryLine();
// => Игра престолов ( Джордж, Мартин ): 500 стр.