Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
XelaNimed пишет:
Но что если в производных классах понадобиться расширить метод?!
Поясните, что значит "расширить". Воспользоваться кодом из родительского класса (возможно, дополнив его чем-то ещё)? Вам поможет обращение через parent::
Покинул форум
Сообщений всего: 136
Дата рег-ции: Сент. 2009
Помог: 0 раз(а)
EuGen, это я и искал!
Другими словами, при необходимости дополнить метод наследуемого родительского класса специфичными особенностями производного класса, мне нужно будет явно вызвать метод. Правильно ли я понял?!
И еще... Если я явно не вызову метод __call в производном классе, будет ли он так-же вызываться при вызове несуществующих методов?!
P.S.: Возникала мысль, что это как-то хитрее реализовано.
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
XelaNimed пишет:
мне нужно будет явно вызвать метод. Правильно ли я понял?!
родительские методы нужно вызывать явно. иначе код в них не выполняется при переопределении
XelaNimed пишет:
Если я явно не вызову метод __call в производном классе, будет ли он так-же вызываться при вызове несуществующих методов?!
Если в производном классе есть метод __call, то будет вызван именно он. Из него вы можете вызвать родительский код, если нужно.
Если в производном классе не определен метод __call, но определен в родительском, то будет вызван родительский метод.
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
XelaNimed пишет:
Если я явно не вызову метод __call в производном классе,
а он и не может быть явно вызван
только описан
наследуется и используется все из родительского
вернее вызывается код родителя если он не переопределен в наследнике
DelphinPRO
Отправлено: 16 Апреля, 2013 - 13:08:50
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
LIME пишет:
а он и не может быть явно вызван
имеется ввиду конструкция parent::method()
----- Чем больше узнаю, тем больше я не знаю.
html-ka
Отправлено: 08 Мая, 2013 - 02:22:32
Новичок
Покинул форум
Сообщений всего: 27
Дата рег-ции: Май 2013
Помог: 0 раз(а)
Vinyl пишет:
armancho7777777 пишет:
Всё придёт с опытом
Здравствуйте, armancho7777777. Я помню, тот же вопрос задавал здесь. Так ответы вроде Вашего жутко раздражали Это я сейчас понимаю, что ответ-то верный, а тогда казалось, что ООП это тайна покрытая мраком и никто ею делиться не хочет)
igosja, у меня в арсенале два мною недописанных движка. Первый кагбэ готов, но там говнокода много, он не расширяем толком, + ещё тысяча и один недостаток. А второй просто не дописал, т.к. пропала нужда и свободное время. Когда-нибудь обязательно второй допишу.
Так вот, к чему я это. Первый я начинал писАть в далекие времена, когда Е.Попов был для меня кем-то на уровне Бьёрна Страуструпа. Но главное, как я его начал писать...
Создал файл index.php в корне, в нем написал <?php и начал по мере поступления идей в мозг, их реализовывать. В итоге получил черт-ногу-сломит архитектуру с хрен-че-найди реализацией. Оно-то работает, но когда нужно что-то изменить/доделать/переделать - капец.
А ко второму я подошел серьезнее. Сначала я начал продумывать архитектуру приложения. Я нарисовал на бумаге, что и как у меня будет работать. Схема не из сложных: несколько блоков, соединенных линиями, каждый из которых за что-то отвечает. Один - за пользователей (авторизацию|регистрацию|бан и т.д.), другой - за текущую страницу, третий - за работу модулей, четвертый - за базу данных, и т.д.. Так вот когда есть такой "план", а он должен быть, если Вы собираетесь разрабатывать что-либо более-менее серьезное, то в данном случае как минимум удобно для каждого блока нашей схемы написать класс.
Представьте себе, что Ваш сайт это предприятие. Классы - это работники. И цех - один php-файл, допустим, init.php. В нем работают объекты классов, проходит весь "процесс" работы на более высоком уровне, а все глубинные процессы описаны в самих классах. Это очень удобно. Важно понимать, что класс это не набор функций и переменных, а будущая сущность, которая что-то умеет и обладает какими-то свойствами. Опять же, преимущества становятся очевидными, когда поработаешь над чем-то более-менее крупным. А если ещё и в команде, то сразу видно разницу.
И когда наступает момент, что без инкапсуляции, полиморфизма и наследования нет так уж и удобно, приходит прозрение
Сейчас прочитал слова, которые хорошо описывают преимущества ООП
habrahabr пишет:
Вкусив запретного плода расширенного синтаксиса, программисты не остановились и возжелали модульности: ведь это так удобно — вызывать отдельно написанный модуль программы и не вникать в его алгоритм. Главное — это знать как он принимает на вход данные и как возвращает результат.
]классная метафора в связи с ней есть ряд уточняющих вопросов, мы можем здесь их обсудить?
Покинул форум
Сообщений всего: 27
Дата рег-ции: Май 2013
Помог: 0 раз(а)
html-ka пишет:
Представьте себе, что Ваш сайт это предприятие. Классы - это работники. И цех - один php-файл, допустим, init.php. В нем работают объекты классов, проходит весь "процесс" работы на более высоком уровне, а все глубинные процессы описаны в самих классах. Это очень удобно. Важно понимать, что класс это не набор функций и переменных, а будущая сущность, которая что-то умеет и обладает какими-то свойствами. Опять же, преимущества становятся очевидными, когда поработаешь над чем-то более-менее крупным. А если ещё и в команде, то сразу видно разницу.
Мэтт Зандстра рекомендует думать, как вы предлагаете, т.е. интерфейсами, одна сущность - одно действие, ну это в идеале. Получается работники стоит на конвейере и выполняет одну операцию, далее деталь идет к следующему, который выполняет над ней другую операцию из технологической цепочки. Над ними стоит начальник цеха. А таких цехов несколько, а над ними еще подразделения и т.д. Как-то очень громоздка получается.
caballero
Отправлено: 08 Мая, 2013 - 11:25:47
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Получается работники стоит на конвейере и выполняет одну операцию, далее деталь идет к следующему, который выполняет над ней другую операцию из технологической цепочки. Над ними стоит начальник цеха. А таких цехов несколько, а над ними еще подразделения и т.д. Как-то очень громоздка получается.
не придумывай лишнего чего там не написано тогда и не будет громоздко
тем более что аналогия не слишком удачная.
Покинул форум
Сообщений всего: 27
Дата рег-ции: Май 2013
Помог: 0 раз(а)
caballero пишет:
Цитата:
Получается работники стоит на конвейере и выполняет одну операцию, далее деталь идет к следующему, который выполняет над ней другую операцию из технологической цепочки. Над ними стоит начальник цеха. А таких цехов несколько, а над ними еще подразделения и т.д. Как-то очень громоздка получается.
не придумывай лишнего чего там не написано тогда и не будет громоздко
тем более что аналогия не слишком удачная.
не понимаю про то, чего не написано
предложите свою
PHPLamer
Отправлено: 20 Мая, 2013 - 06:42:25
Частый гость
Покинул форум
Сообщений всего: 171
Дата рег-ции: Сент. 2008 Откуда: Russia, Krasnodar
Помог: 2 раз(а)
Ранее не использовал ООП, сейчас испытываю необходимость.
Не могу понять как правильно сделать получение и хранение данных для иттерационной обработки.
К примеру: есть класс пользователь и класс для доступа к БД.
В итоге чтобы вывести список всех пользователей потребуется сформировать массив содержащий интересующие поля в экземпляре класса доступа к БД и получить этот массив через метод класса. Вызов метода правильнее сделать в методе класса пользователь. Для того чтобы в дальнейшем обработать данные и встроить их в дизайн необходимо разобрать полученный массив данных.
Получается памяти будет использовано в 3 раза больше чем при процедурном методе с конструкцией.
Скорее всего я неправильно проектирую алгоритм в случае с ООП. Не подскажите как правильнее реализовать такие методы?
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
PHPLamer пишет:
Скорее всего я неправильно проектирую алгоритм в случае с ООП.
Не, не - все ты правильно делаешь. Даешь больше объектов!
ООП (объекты) ради ООП (объектов)!
Почитай вот эту старенькую статью, слегка остынь.
И продолжи в меру юзать ООП и АОП.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.