Добавить в тело метода собственный код для проверки типа объекта.
<?php
/*Класс CDProduct*/
class CDProduct {
public $playLength; // свойство класса
public $title;
public $producerMainName;
public $producerFirstName;
public $price;
function __construct ($title, $firstName, $mainName, $price, $playLength) { // конструктор
$this -> title = $title; // через $this обращаюсь к свойству этого класса title и присваиваю ему значение (аргумент), которое прилетит в переменную $title, когда вызовется метод конструктора (вызывается при создании нового объекта)
$this -> producerFirstName = $firstName;
$this -> producerMainName = $mainName;
$this -> price = $price;
$this -> playLength = $playLength;
}
function getPlayLength () { // метод. возвращает время звучания
return $this -> playLength;
}
function getSummaryLine () { // метод. возвращает одной строкой: A state of trance ( Armin, Van Burren ): Время звучания - 180 min
$base = "{$this -> title} ( {$this -> producerFirstName}, ";
$base .= "{$this -> producerMainName} )";
$base .= ": Время звучания - {$this -> playLength}";
return $base;
}
function getProducer () { // метод. возвр. имя и фам автора
return "{$this -> producerFirstName} " .
"{$this -> producerMainName}";
}
}
/*Класс BookProduct*/
class BookProduct {
public $numPages;
public $title;
public $producerMainName;
public $producerFirstName;
public $price;
function __construct ($title, $firstName, $mainName, $price, $numPages) { // конструктор
$this -> title = $title; // через $this обращаюсь к свойству этого класса title и присваиваю ему значение (аргумент), которое прилетит в переменную $title, когда вызовется метод конструктора (вызывается при создании нового объекта)
$this -> producerFirstName = $firstName;
$this -> producerMainName = $mainName;
$this -> price = $price;
$this -> numPages = $numPages;
}
function getNumberOfPages () { // метод. возвращает количество страниц
return $this -> numPages;
}
function getSummaryLine () { // метод. возвращает имя, фамилию автора и время звучания cd
$base = "{$this -> title} ( {$this -> producerMainName}, "; // title - название книги (в круглых скобках кол-во страниц, имя и фам автора)
$base .= "{$this -> producerFirstName} )";
$base .= ": {$this -> numPages} стр.";
return $base;
}
function getProducer () { // метод. возвр. имя и фам автора
return "{$this -> producerFirstName} " . // пишем return в самом начале метода потому, что нет переменной (как в методе getSummaryLine)
"{$this -> producerMainName}";
}
}
/*Создать класс ShopProductWriter (Добавить в тело метода собственный код для проверки типа объекта)*/
class ShopProductWriter {
public function write ($shopProduct) { // метод класса (ему передается обьект $product1 (уточнение, предназначен для работы с одним типом: ShopProduct) )
if (! ($shopProduct instanceof CDProduct) && ! ($shopProduct instanceof BookProduct) ) { // если переданный аргумент не относится к типу CDProduct и к типу BookProduct
die("Передан неверный тип данных");
}
$str = "{$shopProduct->title}: " // изменить значение свойства title аргумента прилетевшего в переменную $ShopProduct
. $shopProduct -> getProducer()
." ({$shopProduct->price})\n ";
print $str;
}
}
/*===================================================================== Создать объекты ==================================================================*/
/*Создать новый объект типа CDProduct (по типу класса CDProduct)*/
$productCD = new CDProduct("A state of trance", "Armin", "Van Burren", "20 $", "180 min"); // создание нового объекта (типа CDProduct) и вызов конструктора
echo $productCD -> getSummaryLine(); // обращаемся к методу getSummaryLine. возвращает одной строкой: A state of trance ( Armin, Van Burren ): Время звучания - 180 min
// => A state of trance ( Armin, Van Burren ): Время звучания - 180 min
/*Создать новый объект типа BookProduct (по типу класса BookProduct)*/
$productBook = new BookProduct("Игра престолов", "Джордж", "Мартин", "50 $", "500 страниц");
echo $productBook -> getSummaryLine();
// => Игра престолов ( Мартин, Джордж ): 500 страниц стр.
/*Создать новый объект типа ShopProductWriter (по типу класса ShopProductWriter)*/
$writer = new ShopProductWriter(); // $writer - обьект типа ShopProductWriter
$writer -> write( $productCD ); // вызвать метод write и передать ему обьект $productCD типа ShopProductWriter
// => A state of trance ( Armin, Van Burren ): Время звучания - 180 minИгра престолов ( Мартин, Джордж ): 500 страниц стр.A state of trance: Armin Van Burren (20 $)