Конструкторы PHP4
16 сентября 2013
Те, кто никогда не работал с PHP4, частенько тратят очень много времени на поиск причины очень странных багов, которые появляются в случае совпадения имени класса и имени метода.
Дело в том, что в PHP4 не было __construct
. Вместо него использовался метод с тем же именем, что и класс. Ради обратной совместимости это работает до сих пор. Будьте осторожны и не делайте так:
class Cck { // ... public function cck() { // ... } }
Комментарии RSS по email OK
Гениально.............................
…и C++. ;-)
Настало время удивительных историй.
Ну тогда уж и с Java и ещё много с чем.
Бывают куда более интересные ситуации: bolknote.ru/2013/01/10/~3830/
Всегда так и оформляю конструкторы, уж очень уродской мне кажется конструкция __construct. Возможно это отголосок явы. Не совсем понятно, в чем профит?
Павел, единообразие.
Возможно, хотя довольно спорный аргумент. Как уже было упомянуто, на java нет данного единообразия и никто не возмущается. Но возможно виной тому статическая типизация, т.е. явное указание того, что возвращает функция. Вот и получается, что функция class Array { public Array() { ...} } сразу говорит, что она возвращает (объект своего класса), в то время как с __construct данный аспект становится менее прозрачным. Но опять же становится более явным обозначение конструктора. Осталось определится, что же более приоритетней. Отличная тема для холивара.
Сегодня долго не мог понять, почему приложение выбрасывает исключение и не журналирует его. Журналирование происходит в конструкторе. Вспомнил, что про этот пост и тот факт, что недавно увел все исключения из глобального простанства в неймспейсы. Конструкторы все имели ява-форму, т.е. версии 4. Решил исправить все на __construct. Мистика, но журнал заработал. Видимо старые конструкторы начинают неадекватно себя вести в пространствах имен. Другого объяснения не нашел.