Jump to content
  • 0

Полиморфизм и его особенности


people2010
 Share

Question

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

Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Откуда вы слова то такие выкапываете... Попроще надо быть как то )))

1) Да данный код является прямым примером полиморфизма, если быть конкретней то именно в $fig instanceof Figure вся соль, ибо тут одним и тем-же кодом могут быть задействованы объекты разных классов.

2) У вас тут незамысловатая конструкция где имеются ряд классов фигур, внутри класса Figure, ниже идет функция проверки если объект $fig является экземпляром одного из классов фигур от будет выполнена функция Draw(); того класса которому он принадлежит в противном случаи будет написано "неизвестная фигура".

Link to comment
Share on other sites

  • 0
Мне очень интересно, зачем все эти извращения?

Я лично давно уже смерился что people2010 изучает одновременно HTML CSS JS PHP MYSQL так сказать охватил все разделы форумам изучение происходит поверхностно, хаотично, и зачастую все недавно изученное забывается(не удивлюсь что задачи что-то изучить вообще не ставится просто необходимо собрать какойнить мего партал и человек нехватку своих знаний компенсирует знаниями других). Причем автор был замечен в извращении вопросов так чтобы еще и запутать тех кто потенциально может помочь, а порой и вообще вопрос не ставится...

Так что я лично отношусь к любой теме people2010 как к передаче своя игра где нужно дать правильный ответ на вопрос заработав очков ))))

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy