Скажите в двух словах, какой главный смысл полиморфизма(читал что 1 интерфейс и множество реализаций), и приведенный код нже демонстрирует ли полиморфизм?
Код:
|
<?php header('content-type: text/html;charset=utf-8'); ?>
<?
// Класс Фигуры (какой фигуры - неизвестно. просто фигуры)
abstract class Figure {
abstract public function Draw(); // абстрактный метод «Нарисовать фигуру»
}
// Класс Треугольника
class Triangle extends Figure {
public function Draw() { // метод «Нарисовать треугольник»
echo 'рисуем треугольник '.'<br/>';
}
}
// Класс Эллипса
class Ellipse extends Figure {
public function Draw() { // метод «Нарисовать эллипс»
echo 'рисуем эллипс '.'<br/>';
}
}
// Класс Круга
class Circle {
public function Draw() { // метод «Нарисовать круг»
echo 'рисуем круг '.'<br/>';
}
}
// Класс Прямоугольника
class Rectangle extends Figure {
public function Draw() { // метод «Нарисовать прямоугольник»
echo 'рисуем прямоугольник '.'<br/>';
}
}
// обыкновенная функция рисования фигуры
function drawFigure($fig) {
if ($fig instanceof Figure) {
$fig->Draw(); // тут мы на этапе написания этой функции не знаем,
// какая именно фигура будет рисоваться, а интерпретатор
// php это знает только на этапе выполнения скрипта
} else {
echo 'Неизвестная фигура';
}
}
// создадим фигуры
$triangle = new Triangle(); // треугольник
$ellipse = new Ellipse(); // эллипс
$rectangle = new Rectangle(); // прямоугольник
$circle = new Circle(); // круг
// нарисуем прямоугольник
drawFigure($rectangle);
// нарисуем эллипс
drawFigure($ellipse);
// попытаемся нарисовать круг
drawFigure($circle);
?> |
НЕ понятно вот это место:
Код:
|
//Скажите $fig в этот параметр передаются объекты в качестве параметра
//и вот эта переменная $fig превращается в объект?
function drawFigure($fig) {
if ($fig instanceof Figure) { //А здесь сравнивается является ли объект под названием $fig
//объектом класса под названием Figure?
$fig->Draw();
} else {
echo 'Неизвестная фигура';
}
} |