Сен 27 2008
Что нового нас ждет в PHP 5.3?
Случайно наткнулся на сайте php.net на анонс альфа версии PHP 5.3, глянул список изменений и был настолько воодушевлен, что решил написать об этом здесь. Данное обновление принесет нам, пожалуй, самые ожидаемые нововведения в синтаксисе языка.
Ура! В PHP наконец-то появятся нэймспэйсы! Что это такое? Это разделяемые пространства имен, в которых Вы определяете классы и функции, чтобы они не пересекались там, где не надо. Случалось ли Вам объявлять какой-то класс, например, DB или Log, а потом при подключении какой-нибудь библиотеки или репозитария классов обнаружить, что там уже есть класс с точно таким же именем и это создает Вам проблемы. Особенно при использовании функции автозагрузки классов (см. __autoload).
И что в этой ситуации делают почти все разработчики библиотек? Правильно, приписывают префиксы к именам своих классов типа “MyFramework_ClassName”. При этом сами имена классов бывают довольно длинные, а в купе с префиксом и вовсе разростаются иной раз до 40 и более символов. Конечно, это неудобно каждый раз везде писать такие длинные имена, особенно внутри самого фреймворка.
Решение в нэймспэйсах — Вы просто объявляете в начале каждого файла с классом нэймспэйс и все Ваши классы в рамках этого нэймспэйса, будут друг с другом “на короткой ноге”. А чтобы обратиться из другого нэймспэйса нужно либо указать полное имя класса вместе с нэймспэйсом, либо импортировать нэймспэйс при помощи ключевого слова “use”.
Что еще примечательно, нэймспэйсы могут быть вложенными, т.е. образовывать иерархическую структуру, обращаться к которой можно через путь. Вам это ничего не напоминает? Да, именно так реализованы пакеты классов в Java. Только там это называются package, а здесь namespace.
Я не буду переводить всю документацию, моей целью было рассказать лишь общую суть. Подробнее читайте сами.
Еще советую познакомиться с другим интересным нововведением в синтаксисе — “Late static binding“. Дело в том, что при статических вызовах self:: не является своего рода статичным аналогом $this, т.к. self:: ссылается на класс, в котором он используется, а не на тот, к которому идет обращение. Пример в документации очень наглядно демонстрирует проблему и решение, при помощи нового синтаксиса “static::”. Как минимум это должно упростить использование паттерна Singleton когда класс, реализующий данный паттерн, необходимо расширить (наследовать).

Сентябрь 29th, 2008 at 08:30
Еще рекомендую ознакомится со слайдами Ильи Альшанецкого — сотрудника Zend: http://ilia.ws/archives/187-Introduction-to-PHP-5.3-Slides.html
Там более подробнее описываться все изменения, меня например еще очень заинтересовал новый MySQLnd драйвер.
Сентябрь 29th, 2008 at 11:39
Что-то я не смог увидеть на приведенной ссылке никаких слайдов. Да и в тексте сплошь вопросики и спец. символы HTML. А по ссылкам открывается либо пустая страница, либо случайная страница на китайском языке.
Сентябрь 29th, 2008 at 15:01
Да, там не очень интуитивная ссылка в тексте со слова: «here»
В общем проще так: http://ilia.ws/files/phpquebec_php53.pdf
Сентябрь 29th, 2008 at 22:04
Почитал. Да, прикольно все изложено. Мне особенно понравились в новой версии среди прочего: константа __DIR__, заменяющая конструкцию dirname(__FILE__) и
оператор “?:”.
Сентябрь 29th, 2008 at 23:26
Да, много интересных, и приятных мелочей и не мелочей )
В общем то осталось ждать не долго обещали в сентябре-октябре 08, так что уже скоро я думаю надеюсь он быстро станет стандартом на серверах и его можно будет спокойно использовать в повседневной жизни.
Сентябрь 29th, 2008 at 23:34
Лично я на своей домашней девелоперской машине обновился до RC (5.3.0aplha2). Вроде нормально работает, багов пока не заметил. Собственно говоря, это вообще первый случай в моей жизни, когда я решил поставить новую версию PHP, не дождавшись релиза.
Неважно как быстро 5.3 придет на shared-хостинги, там где надо — всегда можно сделать так, чтобы поставили нужную версию или сменить хостинг. Так или иначе, я сейчас начал создавать свой фреймворк уже с использованием нэймспэйсов. Точнее у меня уже есть фреймворк, только он представляет собой просто репозитарий с классами, которые потом наследуются в коде приложения или используются напрямую. Я решил переделать его и сделать из него публичный проект.
Сентябрь 29th, 2008 at 23:38
В общем мне тоже не терпится и наверно поступлю также с локалхостом.
По поводу фреймворка, буду ждать и с интересном по изучаю
Январь 8th, 2009 at 07:52
Меня тоже порадовала новость про php 5.3, но я пока не догоняю причину ввода namespace`ов…. Ведь можно просто допустим через подчеркивание разделить название классов и методов и не париться…. в чем фишка? (видать когда-то отстал от жизни)
Январь 8th, 2009 at 15:53
А ты не устанешь писать везде длинные названия классов длиной в 30 и более символов? Прелесть нэймспэйсов в том, что внутри нэймспэйса к соседним классам можно обращаться напрямую, без указания нэймспэйса.
Январь 9th, 2009 at 16:30
Ну это понятно.. А если хочешь обратиться к классу из другого намспейса, то имя тоже получиться не очень короткое…. так что в принципе ничего не выигрываешь….