Показать сообщение отдельно
  #1 (permalink)  
Старый 07.12.2010, 14:39
Аватар для Golovastik
Профессор
Отправить личное сообщение для Golovastik Посмотреть профиль Найти все сообщения от Golovastik
 
Регистрация: 12.08.2010
Сообщений: 221

Полиморфизм и его особенности
Скажите в двух словах, какой главный смысл полиморфизма(читал что 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 'Неизвестная фигура';
        }
    }
Ответить с цитированием