Сен 27 2008

Что нового нас ждет в PHP 5.3?

Категория: PHPgugglegum @ 13:26

Случайно наткнулся на сайте php.net на анонс альфа версии PHP 5.3, глянул список изменений и был настолько воодушевлен, что решил написать об этом здесь. Данное обновление принесет нам, пожалуй, самые ожидаемые нововведения в синтаксисе языка.

Ура! В PHP наконец-то появятся нэймспэйсы! Что это такое? Это разделяемые пространства имен, в которых Вы определяете классы и функции, чтобы они не пересекались там, где не надо. Случалось ли Вам объявлять какой-то класс, например, DB или Log, а потом при подключении какой-нибудь библиотеки или репозитария классов обнаружить, что там уже есть класс с точно таким же именем и это создает Вам проблемы. Особенно при использовании функции автозагрузки классов (см. __autoload).

И что в этой ситуации делают почти все разработчики библиотек? Правильно, приписывают префиксы к именам своих классов типа “MyFramework_ClassName”. При этом сами имена классов бывают довольно длинные, а в купе с префиксом и вовсе разростаются иной раз до 40 и более символов. Конечно, это неудобно каждый раз везде писать такие длинные имена, особенно внутри самого фреймворка.

Решение в нэймспэйсах — Вы просто объявляете в начале каждого файла с классом нэймспэйс и все Ваши классы в рамках этого нэймспэйса, будут друг с другом “на короткой ноге”. А чтобы обратиться из другого нэймспэйса нужно либо указать полное имя класса вместе с нэймспэйсом, либо импортировать нэймспэйс при помощи ключевого слова “use”.

Что еще примечательно, нэймспэйсы могут быть вложенными, т.е. образовывать иерархическую структуру, обращаться к которой можно через путь. Вам это ничего не напоминает? Да, именно так реализованы пакеты классов в Java. Только там это называются package, а здесь namespace.

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

Еще советую познакомиться с другим интересным нововведением в синтаксисе — “Late static binding“. Дело в том, что при статических вызовах self:: не является своего рода статичным аналогом $this, т.к. self:: ссылается на класс, в котором он используется, а не на тот, к которому идет обращение. Пример в документации очень наглядно демонстрирует проблему и решение, при помощи нового синтаксиса “static::”. Как минимум это должно упростить использование паттерна Singleton когда класс, реализующий данный паттерн, необходимо расширить (наследовать).

10 отзывов на “Что нового нас ждет в PHP 5.3?”

  1. Чистяков Денис says:

    Еще рекомендую ознакомится со слайдами Ильи Альшанецкого — сотрудника Zend: http://ilia.ws/archives/187-Introduction-to-PHP-5.3-Slides.html
    Там более подробнее описываться все изменения, меня например еще очень заинтересовал новый MySQLnd драйвер.

  2. gugglegum says:

    Что-то я не смог увидеть на приведенной ссылке никаких слайдов. Да и в тексте сплошь вопросики и спец. символы HTML. А по ссылкам открывается либо пустая страница, либо случайная страница на китайском языке.

  3. Чистяков Денис says:

    Да, там не очень интуитивная ссылка в тексте со слова: «here»
    В общем проще так: http://ilia.ws/files/phpquebec_php53.pdf

  4. gugglegum says:

    Почитал. Да, прикольно все изложено. Мне особенно понравились в новой версии среди прочего: константа __DIR__, заменяющая конструкцию dirname(__FILE__) и
    оператор “?:”.

  5. Чисятков Денис says:

    Да, много интересных, и приятных мелочей и не мелочей )
    В общем то осталось ждать не долго обещали в сентябре-октябре 08, так что уже скоро я думаю надеюсь он быстро станет стандартом на серверах и его можно будет спокойно использовать в повседневной жизни.

  6. gugglegum says:

    Лично я на своей домашней девелоперской машине обновился до RC (5.3.0aplha2). Вроде нормально работает, багов пока не заметил. Собственно говоря, это вообще первый случай в моей жизни, когда я решил поставить новую версию PHP, не дождавшись релиза.

    Неважно как быстро 5.3 придет на shared-хостинги, там где надо — всегда можно сделать так, чтобы поставили нужную версию или сменить хостинг. Так или иначе, я сейчас начал создавать свой фреймворк уже с использованием нэймспэйсов. Точнее у меня уже есть фреймворк, только он представляет собой просто репозитарий с классами, которые потом наследуются в коде приложения или используются напрямую. Я решил переделать его и сделать из него публичный проект.

  7. Чисятков Денис says:

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

  8. Денис says:

    Меня тоже порадовала новость про php 5.3, но я пока не догоняю причину ввода namespace`ов…. Ведь можно просто допустим через подчеркивание разделить название классов и методов и не париться…. в чем фишка? (видать когда-то отстал от жизни)

  9. gugglegum says:

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

  10. Денис says:

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

Напишите что Вы об этом думаете


*


*


rel=nofollow включен, спам не поднимет Page Rank Вашего сайта



Anti-Spam Image
Введите этот код, чтобы подтвердить, что вы человек
*

* — Обязательно для заполнения

Перейти на главную страницу