под типизацией я понимаю явную или неявную проверку типа на входе функции. а мешает ооп потому, что это коп (классово ориентированное программирование). делать проверку типа - это всё-равно, что в ресторане повесить табличку "только для белых" в то время как нужны просто прилично одетые люди с достаточным объёмом кошелька. требуя определённый тип мы по сути диктуем внутреннее устройство объекта, что несколько противоречит инкапсуляции. да, можно отнаследоваться и что-то измнить, но например, удалить какой-то метод или поле нельзя, да и перегружать методы может потребоваться тучу - вот и получаются классы с кучей методов-заглушек.
Всё дело в отсутствие такого понятия, как перегрузка функций на уровне языка. Имеются только костыли ввиде переменного числа параметров.
$a= new Date (); $b= new Date (time()); $c= new Date ($b); $d= new Date ('greg',time()); первые три нотации - достаточны в большинстве случаев и последняя специально для "произвольного количества" Sergey89, перегрузка функций только добавляет путаницы... у функции не зависимо от параметров должна быть одна точка входа, иначе отладка превращается в мечту мазохиста.
dark-demon Проверка количества и типов параметров, и последующее ветвление алгоритма методу тоже красоты не добавляет. Если тебе нужно три разных способа собрать объект - этим должны заниматься три разных метода. И названия этих методов должны быть "говорящими", чтобы отладка выражений "new Date($anotherDate)" не превратилась в мечту мазохиста.
Dagdamor, в первом случае у тебя получается объект, который в зависимости от реализации может хранить даты и до рождества христова, во втором же - просто число которое может обозначать весьма скромный диапазон дат. к тому же new Date(); имеет смысл сделать равносильной new Date (time());
Sergey89, вот как раз для извращений они и не подходят запиши как мне с их помощью что-нибудь из 8 века до нашей эры Dagdamor, смотри 4 нотацию...
dark-demon Это плата за то, что кроме даты, в формате также присутствует и время; а время в реальных приложениях бывает нужнее, чем даты до 1970 года. Кстати, это хороший пример. У нас есть класс, который умеет хранить дату (произвольную, хоть 1 января 100 года). Есть набор методов, которые умеют с датами выполнять всякие манипуляции (прибавлять/отнимать промежуток, вычислять разницу между датами и т. д.). Потом тебе понадобился класс, который кроме даты, хранит еще и время, и ты унаследовал этот новый класс от Date. Как быть с существующими методами? Все переписывать?
Код (Text): Потом тебе понадобился класс, который кроме даты, хранит еще и время, и ты унаследовал этот новый класс от Date. это типа у двух белых родителей родился чернокожий ребёнок? Time - это самостоятельный класс со всеми вытекающими
*пришел с улицы*: холивар, холивар, ура!!! *Вспоминает, что для холивара он и привлек ярого Сишника Стингыча* *чертовски доволен, пока холивар не переходит на личности*
dark-demon А вот и нет - дата и время вместе образуют неразрывную сущность - назовем ее "момент" (или "штамп" ) Вовсе не чернокожий, имеет право на существование, зачастую необходим. Горбунов Олег,
Я потихоньку сползаю под стол..... в чем Код (Text): $date=time() //конструирует данные внутри функции - это не создание из внешних данных $date = new Date(5, 8, 2007) //вот это конструктор, а не то что вы написали А вот это вообще идиотизм! Код (Text): $b= new Date (time()); //vs. $b=time(); Я не понял, а что возвращает функция time()? уж не объект ли типа Date? или что-то другое? Я приводил тип даты чисто абстрактно не сводя к конкретике языка, а вы мне тут какую-то ахинею пишите. В общем все с вам понятно... засиделись вы граждане на PHP. Его вы чувствуете хорошо, но вот на все остальное смотрите через него, а это плохо. Из-за мягкой типизации вы не видите даже абсурда показанного мною выше.... Мой совет такой, кто хочет изучить ООП (а изучить его, наверное, стоит всем) учите его на примере С++ или Java иначе вам будут попадаться такие жалкие обгрызки.
JStingo С добрым утром Мы здесь как раз обсуждаем особенности ООП на ПХП. Даже в первой мессаге учебник по ПХП, и примеры на ПХП. Про другие языки никто не говорит... и если ты думаешь, что здесь никто не знает ни одного языка кроме ПХП, сочувствую.
Зачем? Функции работающие с базовым классом будут прекрасно работать и с производным. Где проблема? Не вижу хоть убей.
Особенности? я сказал, что ООП не должен доходить до идотии, как в том примере в начале. Согласен большинство задач на ПХП носит линейный характер, к тому же работа приложения в браузере имеет ОООГРОмное число различий с работой обычных приложений. НО человек ведь спрашивал про ООП, что такое и с чем его едят. Я и пытался это рассказать, пусть даже на абстарктном примере. Ваш подход понятен, что ООП почти не нужен, поэтому его можно и не знать. Правда есть одно но, вы то его, в отличии от спрашивающего, знаете, а он не знает.
JStingo Не передергивай мои слова; я не говорил, что его "можно и не знать". Его нужно знать, но применять с головой. А спрашивающий, между прочим, попросил _реальный_ пример, на котором использование ООП оправдано. Его я так и не увидел.
http://php.ru/forum/viewtopic.php?p=56463#56463 - вот _реальный_ пример, который без ооп превращается в спагетти. чтобы добавить номый драйвер субд мне достаточно добавить один файл и всё, ничего нигде не изменяя. а в случае процедур - пришлось бы искать все проверки и их исправлять...
нет, это всё - различные сущности. время не имеет даты, а дата не имеет времени и наследовать одно от другого - глупость. а штамп - это дата плюс время. а вообще я, когда говорил про Date, подразумевал именно штамп.
host, значит ты его не знаешь, если думаешь где и зачем, да и суда по твоим вопросам ты явно плаваешь в материале. Вообще большая часть концепций (интерфейсные классы, виртаульные функции и др.) в ПХП просто выкидывается из-за мягкой типизации. Поэтому в ПХП невозможно понять назначение многих вещей из ООП, т.к. в них как бы пропадает надобность. Я признаю, что программировал на ПХП очень не много, поэтому у меня не появились собственные реальные примеры, где это нужно. Именно для этого я и советовал изучать ООП сперва на нормальном ОО-языке, а потому уже решать, где в ПХП он нужен. На этом я с вам распрощаюсь, ибо спор идет не про ООП, а про косяки языка ПХП.