[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ООП в PHP
McLotos
Подскажите что можно почитать по этой теме кроме "Объектно-ориентированное программирование на PHP 5", есть ещё какие-нибудь полезные книжки по этой теме?
А может вообще у кого-нибудь появится желание меня поднатаскать по этой теме? Можем договориться. wink.gif



Спустя 1 минута, 12 секунд (3.11.2011 - 11:04) Игорь_Vasinsky написал(а):

Спустя 9 минут, 13 секунд (3.11.2011 - 11:13) McLotos написал(а):
=)
Значит я ещё не очень поумнел =)
А можете меня обучить? Ну чуть-чуть чтобы просто в логику вникнуть, а дальше как-нибудь сам.
Особенно привлекла книжка из серии Глазами Хакера. Я читал почти всю серию, только вот про php не видел. =)

Спустя 1 минута, 30 секунд (3.11.2011 - 11:15) Игорь_Vasinsky написал(а):
Я бы тебе советовал пройти этот курс - всё обучение построено на аналогии и сравнении с реальной жизнью.

http://irbis-team.com/15/8

Спустя 3 минуты, 8 секунд (3.11.2011 - 11:18) McLotos написал(а):
Блин, ОГРОМНОЕ человеческое спасибо!

Спустя 14 минут, 54 секунды (3.11.2011 - 11:33) McLotos написал(а):
Почитал чуть-чуть и возник такой вопрос.
Вывод результата работы класса делается в примере так
echo $obj -> helloWorld($name)
а если я допустим использую шаблоны (tpl) и мне нужно в них сделать вывод. Если допустим просто вывести результат переменной то я делаю так <?=$obj?> или если функция то так <?funk()?> а как выводить результат работы класса?

Спустя 10 минут, 15 секунд (3.11.2011 - 11:43) Игорь_Vasinsky написал(а):
Цитата
Вывод результата работы класса делается в примере так
echo $obj -> helloWorld($name)


это инициализация объекта класса

Прежде чем приступать к работе с шаблонами, необходимо понять суть ООП, ООП это очень серъёзный момент и использовать его не по назначению - это глупо.

Во - первых прежде чем показывать какой я крутой программист - необходимо понять основы ООП (иначе мнение будет полностью противоположным)

Ты сразу кинулся искать применение ООП в своём шаблонизаторе, это не правильный подход.

Для этих целей мог бы просто написать функцию парсера для TPL

1. Получить шаблон
1. Поиск по шаблону
2. Замена в шаблоне.

Спустя 8 минут, 5 секунд (3.11.2011 - 11:51) McLotos написал(а):
Но в соей структуре (как сделано сейчас) существует только 1 класс
class Template 
{ public static function evaluate($str,$arr)
{ foreach($arr as $k=>$v)
$str = str_replace("{".$k."}", $v,$str);
return $str; }
}

Его применение банально, я делаю запрос в БД, оттуда вытягиваю что-то типа
<ul type=none>
<li>{link.home}</li>
<li>{link.news}</li>
<li>{link.admins}</li>
<li>{link.settings}</li></ul>
сохраняю её в переменную $menu и делаю вывод
print Template::evaluate($menu,$lang);
или это тоже не правильно?

Спустя 4 минуты, 30 секунд (3.11.2011 - 11:56) m4a1fox написал(а):
Итак, ООП! Привыкай мыслить абстрактно! Это уже не процедуры, хотя с ними многое связано!
Я бы вам посоветовал вникнуть в суть ООП! Не бросаться сразу на применение полученных знаний в своем проекте.... ИМХО - не получится так к сожалению.

Вообще понятие правильно или нет, сугубо личное у каждого. Есть определенный набор необходимых вещей, таких как абстрактные классы. Полиморфизм. Инкапсуляция, делегирование... и много чего другого. Есть 3 кита на кот. строится ООП. Это - ИНКАПСУЛЯЦИЯ, НАСЛЕДОВАНИЕ, ПОЛИМОРФИЗМ. Сходу это не преодолеть. Хотя может я туп, но изучаю ООП с июля....

Спустя 13 минут, 50 секунд (3.11.2011 - 12:09) McLotos написал(а):
Цитата
ИНКАПСУЛЯЦИЯ, НАСЛЕДОВАНИЕ, ПОЛИМОРФИЗМ

Да, я помню как несколько лет назад, к сожалению, прогуливал лекции по ООП, где всё это дело нам объясняли. Просто при ООП в той же Delphi там всё наглядно(поэтому и нудно), а с php как-то всё по-другому.

Спустя 3 минуты, 29 секунд (3.11.2011 - 12:13) m4a1fox написал(а):
Не знаю как в Делфи. Не сталкивался... но в php - весело однозначно!

Спустя 4 минуты, 10 секунд (3.11.2011 - 12:17) Winston написал(а):
m4a1fox
Что такое полиморфизм ? smile.gif

Спустя 2 минуты, 40 секунд (3.11.2011 - 12:20) m4a1fox написал(а):
Winston, проверка однако biggrin.gif
Как я рад что ты спросил! Полиморфизм - это когда мы можем использовать методы и объекты одного класса, абстрагируясь от их реального класса!

Спустя 4 минуты (3.11.2011 - 12:24) Winston написал(а):
Свернутый текст
Цитата (m4a1fox @ 3.11.2011 - 11:20)
проверка однако

Нет не проверка, сам пытаюсь въехать ph34r.gif

Цитата (m4a1fox @ 3.11.2011 - 11:20)
Полиморфизм - это когда мы можем использовать методы и объекты одного класса, абстрагируясь от их реального класса

huh.gif

Спустя 1 минута, 46 секунд (3.11.2011 - 12:26) m4a1fox написал(а):
Winston
Цитата
Нет не проверка, сам пытаюсь въехать

А! Ну окей! Дело то хорошее! Давай в мыло залазь! Поговорим если есть желание и время!

Спустя 6 минут, 37 секунд (3.11.2011 - 12:32) Игорь_Vasinsky написал(а):
Winston
мы вторые или третьи сутки в агенте расжовываем всю эту ООП.... меня учать wink.gif

Спустя 1 минута, 58 секунд (3.11.2011 - 12:34) caballero написал(а):
Цитата
Полиморфизм - это когда мы можем использовать методы и объекты одного класса, абстрагируясь от их реального класса


сам хоть понял что написал?

кстати, полиморфными могут быть функции и в процедурном программировании

to McLotos
Изучать нужно не ООП а программирование. ООП - это не отдельный язык.

Спустя 1 минута, 24 секунды (3.11.2011 - 12:35) Игорь_Vasinsky написал(а):
caballero
а что не понятного?

Спустя 2 минуты, 59 секунд (3.11.2011 - 12:38) m4a1fox написал(а):
caballero
Цитата
сам хоть понял что написал?

Да! Понял!

Сразу оговоримся! Я в курсе что вы супер-пупер программист! Поэтому, если по вашему, то, что я написал фигня, и вообще не шарю в этом, и мне с таким пониманием, лучше идти коровам хвосты в деревне крутить, то..... напишите, как вы понимаете полиморфизм...

А то крики, бред, фигня, да чувак не в теме, учи мат часть, или сначала научись privat от protected отличать - проходили! Есть свое мнение на этот счет - прошу, поделитесь!

Спустя 1 минута, 31 секунда (3.11.2011 - 12:40) Winston написал(а):
Свернутый текст
Цитата (m4a1fox @ 3.11.2011 - 11:26)
Давай в мыло залазь! Поговорим если есть желание и время!

Давай вечером.

McLotos
Почитай хотя бы вики для начала, и пройдись по ссылкам которые там есть.

Спустя 28 минут, 1 секунда (3.11.2011 - 13:08) bodja написал(а):
Дам задачку по полиморфизму :D ?что бы было проще понять полиморфизм.
есть функция

function Plus($a,$b){
??????????
return $r;
}


Задание 1
$a=2;
$b=2
;

В функции Plus($a,$b) их нужно сложить ,и вернуть результат 4

Задание 2
$a='два';
$b='два';


В функции Plus($a,$b) их нужно сложить ,и вернуть результат 'двадва' :D


Вот то что вы напишете в ?????????? и будет пользовательской реализацией полиморфизма.

Есть еще реализация полиморфизма на языковом уровне.
Например

file('http://www.example.com/');
file('./myfile.txt');


Вот вам абстракции :D ,неудевительно,что каждый интерпретирует полиморфизм по своему.

Если относить полиморфизм к ООП ,то тут вообще черт голову сломит,такое уже намутили,что концов не найдеш.


 ! 

М
Выделяйте код! Читать невозможно.
Winston

Спустя 1 минута, 36 секунд (3.11.2011 - 13:10) caballero написал(а):
Цитата
Почитай хотя бы вики для начала, и пройдись по ссылкам которые там есть.

по данному вопросу в педивикии написан какой то бред


2 m4a1fox
Зачем столько экспресии?

Если по простому то полиморфизм - это возможность задания разного поведения функции с тем же именем. В PHP это не работает, насколько я знаю, но в С++ можно задать несколько функций (или методов класса)
с тем же именем но с разным набором параметров. И в зависимости от того какие аргументы будут переданы при вызове такая из функций и будет вызвана.
То же самое происходит если функция перегружена в классе наследнике .


.

Спустя 1 минута, 50 секунд (3.11.2011 - 13:11) m4a1fox написал(а):
caballero
Цитата
Зачем столько экспресии?

Ну я думал ща АТАКА будет! Мол не шаришь, кыш отсюда! smile.gif biggrin.gif Вот и перестраховался! biggrin.gif biggrin.gif

Спустя 1 минута, 58 секунд (3.11.2011 - 13:13) Winston написал(а):
Цитата (caballero @ 3.11.2011 - 12:10)
насколько я знаю, но в С++ можно задать несколько функций (или методов класса)
с тем же именем но с разным набором параметров. И в зависимости от того какие аргументы будут переданы при вызове такая из функций и будет вызвана.

Да да да, я тоже такое помню...
То есть полиморфизм - несколько реализаций одного метода? unsure.gif



Спустя 2 минуты, 50 секунд Winston написал(а):
bodja
function foo($a, $b)
{
if(is_int($a) && is_int($b))
return $a + $b;
if(is_string($a) && is_string($b))
return $a . ' ' . $b;
}
echo foo(1, 2);
echo foo('раз', 'два');

Так ? :unsure:

Спустя 3 минуты, 16 секунд (3.11.2011 - 13:17) caballero написал(а):
2 m4a1fox
Понятно - горячий эстонский парень

Цитата
То есть полиморфизм - несколько реализаций одного метода?


Да это самый простой для понимания классический пример. Все остальное - от лукавого.

Спустя 11 минут, 19 секунд (3.11.2011 - 13:28) m4a1fox написал(а):
caballero
Цитата
Понятно - горячий эстонский парень

крымский :)

Вот такой пример видел, и на его основе - понял

class A{
public function GET(){echo 'This is class A ';}
public function SET(){$this->GET()}
}


class B extends A{
public function GET(){echo 'This is class B ';}
}


$a = new A();
$a->SET();

$b = new B();
$b->SET(); // Как я понимаю это и есть полиморфизм.

Спустя 24 минуты, 1 секунда (3.11.2011 - 13:52) vital написал(а):
Цитата
Если по простому то полиморфизм - это возможность задания разного поведения функции с тем же именем. В PHP это не работает, насколько я знаю, но в С++ можно задать несколько функций (или методов класса)
с тем же именем но с разным набором параметров

Тогда что такое перегрузка и/или перекрытие? ;)
Не совсем верно ваше высказывание.

Спустя 1 минута, 36 секунд (3.11.2011 - 13:54) vital написал(а):
Цитата
// Как я понимаю это и есть полиморфизм.

Это обычное наследование. Просто переопределили метод предка.

Спустя 7 минут, 47 секунд (3.11.2011 - 14:01) m4a1fox написал(а):
vital
Цитата
Это обычное наследование. Просто переопределили метод предка.

Переопределение метода предка это как раз
 public function GET(){echo 'This is class B ';}

Мы в B классе переопределяем метод GET из A класса!

Спустя 5 минут, 54 секунды (3.11.2011 - 14:07) caballero написал(а):
Цитата
Тогда что такое перегрузка и/или перекрытие? wink.gif


тоже полиморфизм

Спустя 2 минуты, 24 секунды (3.11.2011 - 14:10) Winston написал(а):
Цитата (caballero @ 3.11.2011 - 13:07)
тоже полиморфизм

Мозги плавятся ohmy.gif

Спустя 20 минут, 50 секунд (3.11.2011 - 14:31) caballero написал(а):
Цитата
Мозги плавятся



На самое деле ничего сложного.

Полиморфизм - в общем случае способность объекта (класса, функции) с тем же именем изменять свое поведение в зависимости от обращения к нему.



Спустя 2 минуты, 6 секунд (3.11.2011 - 14:33) Winston написал(а):
Цитата (caballero @ 3.11.2011 - 13:31)
Полиморфизм - в общем случае способность объекта (класса, функции) с тем же именем изменять свое поведение в зависимости от обращения к нему.

Во !!! Отличное определение, даже я понял.

Спустя 6 часов, 37 минут, 27 секунд (3.11.2011 - 21:10) bodja написал(а):
Я тут немного уточню.
это способность изменять свое поведение в зависимости от типа входных данных.
Я не случайно привел задачку и показал совсем другой пример с функцией file,
что бы вы поняли саму абстрактность данных.
То есть в первом случае (в задачке) мы изменяем поведение функции в зависимости от
типа данных буквально.
Во втором (с file) здесь изменяется ее поведение в зависимости от того,что мы ей указываем.
То есть если мы указываем файл ,она шуршит в файловой системе ,если ссылку ,она использует
сокеты и выходит в инет .

В практической реализации для веба например можно придумать функцию или метод DocRead ,которая сможет читать форматы TXT,XML,HTML и выводить содержимое этих документов на страницу .И в зависимости от того ,какой документ мы ей зададим ,мы естественно будем менять механизм чтения этих файлов.
Ну а потом, мы просто не думаем ,как мы будем разруливать эти документы.
DocRead ('text.txt');
DocRead ('text.xml');
DocRead ('text.html');

ЗЫ Тоже ходил в вики,там какой то долбень перпутал абстрактность в данных с абстрактным классом,но так как абстрактный класс существует только для наследавания ,он туда еще и наследование прикрутил,но так как это все не решает сути полиморфизма ,он начал еще и с перегрузкой методов играться.В итоге полная путаница и непонимание самого себя.Еще бы интерфейс бы прикрутил и запустил свое определение на луну. biggrin.gif

ЗЫЫ Winston меня сильно кумарит отсутствие моих любимых смайликов при выделении кодом,найчите как обойти. wink.gif

Спустя 2 часа, 4 минуты, 36 секунд (3.11.2011 - 23:15) SerginhoLD написал(а):
Если кратко, на русском понятном языке, полиморфизм это способность класса-предка переопределять методы класса-родителя, и все, точка, нет здесь другого определения, ничего другое к полиморфизму не относится.
class A
{
function name()
{
return "Я главный";
}
}


class B extends A
{
function name()
{
return "А я переопределил твое имя ^^";
}
}

Всё.

Спустя 4 минуты, 27 секунд (3.11.2011 - 23:19) SerginhoLD написал(а):
bodja твоя задача никак к полиморфизму не относится, у тебя обычный пример функции, в которой проверяются параметры, и на основе проверки, производится какая либо операция. Твоя задача, возможный(о_О) пример перегрузки функции, но язык PHP не умеет перегружать функции. Перегрузка функций(опять же повторяюсь) к полиморфизму никак не относится.

Спустя 45 минут, 3 секунды (4.11.2011 - 00:04) bodja написал(а):
SerginhoLD
Я не имею привычки кому либо ,что то доказывать,и тем более ,что либо отрицать.
Я понимаю что время идет,появляются новые языки,со своими возможностями и недовозможностями ,и каждый из нас прошел разную школу программирования.
Если вас так интересует полиморфизм ,и только так и никак иначе ,вот пожалуста выбирайте наздоровье.
А насчет определений полиморфизма имено в ООП,я уже свое мнение высказывал в начале.
Цитата

Конкретные механизмы реализации полиморфизма:

1. Чистый полиморфизм – один код функции по разному интерпретируется в зависимости от типов аргумент:

2. Перезагрузка – определение нескольких функций с одним именем (С++);

3. Переопределение (простой полиморфизм) – конкретный метод определяется телом объекта при компиляции программы (ранее связывание).

4. Полиморфные объекты (сложный полиморфизм) – конкретный метод определяется топим объекта в процессе выполнения программы (позже связывание).

5. Обобщение функции (шаблоны) – используются при реализации в языке параметризованных классов (С++).

Спустя 20 минут, 22 секунды (4.11.2011 - 00:25) caballero написал(а):
SerginhoLD пример человека изучающего ООП (по видеокурсам судя по всему) вместо програмирования.


bodja
С приведенными функциями ситуация несколько неоднозначная. С одной строны функции действительно ведут себя как полиморфные, с другой стороны обычно применительно к языкам программирования подразумевается что полиморфизм обеспечивается на уровне компилятора, который генерит разные сигнатуры для вариантов функций и автоматически вызывает необходимую.

Спустя 20 минут, 24 секунды (4.11.2011 - 00:45) bodja написал(а):
caballero
Я с вами согласен,но только до того момента когда сам не начнеш писать компилятор - интерпретатор-фрейворк ,называйте как хотите.
Полиморфизм - это любимая фича языкописателей,в пользовательском программировании я редко встречал эту реализацию.

Но тут видите как ,больше академический спор.
Но мне кажется лучше изучать такие вещи ,чем всякие новомодно-старомодные паттерны,
а потом думать каким боком это влепить.

Спустя 5 минут, 42 секунды (4.11.2011 - 00:51) caballero написал(а):
Цитата
Полиморфизм - это любимая фича языкописателей,в пользовательском программировании я редко встречал эту реализацию
.
Крайне странно - фича очень удобная и лично мне в PHP ее очень не хватает

Было бы гораздо удобнее вместо проверки является ли параметр таким то типом или задан ли второй, третий и т.д. параметр просто написать три функции без всяких if else

Кода может и больше бы получилось, зато проще и читабельнее а компилятору без разницы.

Спустя 6 часов, 2 минуты, 17 секунд (4.11.2011 - 06:53) McLotos написал(а):
caballero
ООП вообще не язык, а только методика. Способ реализации, вот и всё.Winston
Не нужно меня в википедию посылать. Я это и так знаю.

Цитата
И в зависимости от того какие аргументы будут переданы при вызове такая из функций и будет вызвана.

Почему в php это нельзя сделать? а как же If или тот же Case?
Короче начинаем усиленно изучать объектно ориентированный подход к PHP-программированию =)

Спустя 3 часа, 47 минут, 56 секунд (4.11.2011 - 10:41) SoMeOnE написал(а):
Я чего то не понимаю)
Вот эта фраза
Цитата (caballero @ 3.11.2011 - 11:31)
Полиморфизм - в  общем  случае  способность объекта (класса, функции) с  тем  же   именем  изменять  свое   поведение  в  зависимости  от обращения   к  нему.

Я часто использую такие ф-ии
public static function preString ($str, $specchars = false) {
if (!is_array($str)) {
if (get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
if ($specchars) {
$str = htmlspecialchars($str);
}
$str = trim(mysql_escape_string($str));
} else {
foreach ($str as $k=>$v) {
if (get_magic_quotes_gpc()) {
$v = stripslashes($v);
}

if ($specchars) {
$v = htmlspecialchars($v);
}
$str[$k] = trim(mysql_escape_string($v));
}
}


return $str;
}

Я что полиморфизм использую. Что то не верится. Да и еще все говорят что в php этого нету.
Вродебы ф-ия работает по разному в зависимости от входящих параметров.
Можете объяснить в чем я ошибаюсь?)

Спустя 38 минут, 46 секунд (4.11.2011 - 11:20) McLotos написал(а):
И так вернемся к тому с чего всё-таки началась эта тема =)
Игорь_Vasinsky
Цитата
Ты сразу кинулся искать применение ООП в своём шаблонизаторе, это не правильный подход.

У меня есть готовая структура, есть система подключения шаблонов, если всё это подогнать под ООП стандарты, то как мне всё-таки реализовывать вывод информации?
Во многих CMS которые я разбирал пишутся специальные функции, которые разрешают использовать что-то типа {PHP.MENU} для вывода, а мне как тогда делать?
Я вот почитал на ирбисе статейку по ООП, и немного в тупике.
Просто я привык сразу пробовать то что читаю, и желательно на реальном примере. В данный момент я пытаюсь написать первый класс, который бы позволил находясь в админке работать с файлами на сервере, ну т.е. создавать, изменять, удалять. И я даже не знаю с чего начать. Как это сделать функциями я могу понять, а вот с классами тупняк. =(
Может я уже слишком старый для восприятия новых техник? =))))

Спустя 13 минут, 8 секунд (4.11.2011 - 11:33) Игорь_Vasinsky написал(а):
дело не в возрасте.

мне самому пока трудно объективно рассуждать в этом направлении ибо оно для меня тоже ново (3 раза начанал, счас 4й - уже подольше паримся)

Вообщем что я могу предложить - ты пиши класс - выкладывай - а здесь те подскажут где что и почему так делать не надо. - это будь уверен.

Спустя 13 минут, 21 секунда (4.11.2011 - 11:46) McLotos написал(а):
Вообще разработка класса у меня получается очень большим процессом:
1. Проработка идеи (карандашом на бумажке =))
2. Способы реализации (как правило БлокСхема)
3. Написание кода (сначала просто код, патом переделывается в фукнцию, затем оптимизируется и далее уже разработка класса), блин сколько действий =))))

Спустя 8 минут, 27 секунд (4.11.2011 - 11:55) Игорь_Vasinsky написал(а):
Не забывай про инкапсуляцию и расширение возможностей через наследование.

чё сказал.... blink.gif

Спустя 1 минута, 23 секунды (4.11.2011 - 11:56) McLotos написал(а):
Свернутый текст
Игорь_Vasinsky
=))))) laugh.gif laugh.gif laugh.gif laugh.gif laugh.gif laugh.gif
РжуНиМагу! =)))

Спустя 3 минуты, 22 секунды (4.11.2011 - 11:59) bodja написал(а):
Цитата
Я что полиморфизм использую. Что то не верится.

Ну а в чем разница ,между тем ,что написали функцию вы ,или написал ее кто то другой. biggrin.gif

Мне вот тоже не верилось ,когда я написал программу и обьявил некоторые ее функции как
public function ,а потом из другой программы смог с этими функциями работать точно так же ,как и с API операционки,хотя это был exe а не dll.
Более того пошел дальше ,подключил библиотеку разруливания vbs скриптов и код этого скрипта смог обратится к функциям моей программы ,точно так же как и к штатным своим функциям.
Представте какие у меня были шайбы от удивления - я почуствовал себя богом biggrin.gif biggrin.gif biggrin.gif

Спустя 6 минут, 33 секунды (4.11.2011 - 12:06) McLotos написал(а):
А!-а!-а!-а!-а!-а!-а!
ООП в PHP это вынос мозга!

Спустя 35 минут, 29 секунд (4.11.2011 - 12:41) m4a1fox написал(а):
McLotos
Из книжки цитата....
Цитата

По мере работы с набором классов неминуемо будут возникать исключительные ситуации. Поэтому, прежде чем перейти к разработке набора классов, следует создать иерархию исключений, обрабатывающих исключения...

Спустя 32 минуты, 36 секунд (4.11.2011 - 13:14) caballero написал(а):
Цитата
Я что полиморфизм использую. Что то не верится. Да и еще все говорят что в php этого нету.
Вродебы ф-ия работает по разному в зависимости от входящих параметров.
Можете объяснить в чем я ошибаюсь?)


в PHP это не рабьотает на уровне компилятора

то есть нельзя написать

function myfunc($par1)
{
}


function myfunc($par1,$par2)
{
}


function myfunc(mytype $par1)
{
}

и т.д.






Спустя 1 минута, 58 секунд (4.11.2011 - 13:16) caballero написал(а):
Цитата
По мере работы с набором классов неминуемо будут возникать исключительные ситуации

а при работе не с классами они не будут возникать? И почему неминуемо должны возникать?

Спустя 29 минут, 59 секунд (4.11.2011 - 13:46) m4a1fox написал(а):
caballero
Цитата
И почему неминуемо должны возникать

Откуда мне знать, почему именно так. У автора учебника спросите biggrin.gif

Спустя 1 час, 20 минут, 23 секунды (4.11.2011 - 15:06) SoMeOnE написал(а):
caballero
Вроде бы понел)
Если бы было возможно, то можно было бы обойтись switch, if конструкций в функции...?

Спустя 2 дня, 19 часов, 43 минуты, 31 секунда (7.11.2011 - 10:50) linker написал(а):
Цитата (caballero @ 3.11.2011 - 13:10)
насколько я знаю, но в С++ можно задать несколько функций (или методов класса)

Это называется перегрузка методов класса и к полиморфизму никакого отношения не имеет. Это уходит тесными корнями в функциональное программирование, которого почему-то по вашему убеждению не существует. В PHP я могу сделать, например, так
function foo()
{
list($param1, $param2, $param3) = func_get_args();
}
foo();
foo(1);
foo('s', 2);
foo(array(1, 2), 'd', 1);


Полиморфизм тесно связан с наследованием и определяет изменение поведения экземпляров класса. Чтобы лучше было понятно вспоминаем что такое полиморфные вирусы? Это вирусы, которые копируют себя из одной жертвы в другую и при этом модифицируют свой бинарный код, меняя его реализацию и поведение, но не изменяя результата работы. Т.е. суть этого - изменение поведения экземпляра при условии неизменности результата.

Спустя 55 минут, 6 секунд (7.11.2011 - 11:45) caballero написал(а):
Цитата
Это называется перегрузка методов класса и к полиморфизму никакого отношения не имеет.


это и есть классический полиморфизм. Из того что в ООП используется полиморфизм не следует что он используется только в ООП.

Цитата
Полиморфизм тесно связан с наследованием

Никак не связан. Можно наследовать функцию без переопределения а можно перегрузить функцию и наследоватиь уже полиморфную.

Спустя 2 часа, 11 минут, 3 секунды (7.11.2011 - 13:56) linker написал(а):
caballero
Это не классический полиморфизм, а частный случай, отдельный вид, у которого есть своё название - перегрузка и в целом никто его не рассматривает как чистый или классический полиморфизм. И т.к. данная тема имеет название ООП, то мы говорим, что полиморфизм тесно связан с наследованием, а так как данная тема в контексте PHP (а именно динамической типизации), то мы отбрасываем перегрузку, как не имеющую реализации на уровне языка. Собственно даже PHP-шное неявное преобразование типов является полиморфизмом, но никто об этом не говорит именно в этом контексте.

Спустя 29 минут, 1 секунда (7.11.2011 - 14:25) caballero написал(а):
Пусть так.
Но тогда переопределение функции при наследовании - тоже частный случай.

собственно, в ООП все, кроме инкапсуляции - дополнительные плюшки, хоть и общепринятые но вовсе не обязательные.





Спустя 18 минут, 42 секунды (7.11.2011 - 14:44) linker написал(а):
Переопределение метода при наследовании как раз и есть основа полиморфизма в ООП.

Ну для хоумпаги может одной инкапсуляции и хватит, хотя даже и без неё можно обойтись, а ещё лучше обойтись и без ООП. Собственно это как бы не плюшки, а парадигмы ООП.

Спустя 16 минут, 35 секунд (7.11.2011 - 15:00) twin написал(а):
linker
Цитата
Ну для хоумпаги может одной инкапсуляции и хватит, хотя даже и без неё можно обойтись, а ещё лучше обойтись и без ООП.
В 99% программ на PHP можно обойтись.
Ибо это и есть набор хоумпаг. smile.gif



_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.