Главная > Open Source, PHP, веб-обзоры > Первая альфа версия PHP 5.3 — что же там нового?

Первая альфа версия PHP 5.3 — что же там нового?

3 августа 2008

Приветствуем наших читателей. Очень уж суетливое лето выдалось и сложная работа - алгоритм в текущем проекте на 500 строк, занят около недели времени, при этом его текущая альфа-версия хоть и работает, но пока не до конца так как надо.. а это всего лишь отладочный симулятор... Но что это я о работе. В мире есть вещи и поинтереснее. А именно - вышла и доступна первая альфа-версия следующей ветки РНР - 5.3. Пока только в исходных кодах, бинарная версия для Win32 обещается в течении нескольких дней. Пока же мы просто посмотрим, что там нового и вкусного?

Первым и основным изменением в этой версии является внедрение поддержки пространств имён - namespace. Соответственно, появилось зарезервированное ключевое слово namespace, теперь его нельзя использовать для названия переменных - иначе будет фатальная ошибка. Почитать более подробно можно в разделе документации, которая пока что немного устарела и не отражает текущего состояния кода, но даст общее понимание концепции. А в коде можно использовать два варианта объявления пространств имён - через константу __NAMESPACE__ или конструкцию namespace::.

Одним из важных нововведений является и позднее статическое связывание (Late Static Bindings). Это расширение ООП модели языка, которое позволяет реализовать следующие вещи (подробнее в документации):

  • Текущие ограничения self:: - в конструкции из нескольких статических методов класса (которые наследуют друг друга) ссылку на текущий класс в зависимости от того, где функция определена, а не с какого класса вызвана. То есть мы можем получить имя класса, которые реализует некоторый метод, даже если у нас целая иерархия классов.
  • Применение static:: вместо self:: в примере выше покажет класс, с которого вызван метод, хотя реализация может быть в другом классе.

Другие примеры с исходными кодами описаны в документации, теория более подробно описана в Wikipedia.

Добавлен метод для реакции на вызовы нереализованных статических методов. Это "магический" метод __callStatic, который вызывается при любом обращении к неизвестным статическим методам, ранее можно было перехватывать только обращения к свойствам и обычным методам.

Появились ранее несвойственные для РНР вещи - лямбда-функции и замыкания (closure, наиболее часто это применяется в JavaScript ну и в других скриптовых языках). Хотя реализованы они не так гибко и элегантно, как в том же JavaScript, но и это уже хорошо, однако я бы не использовал такие конструкции без особой необходимости и тщательно это документировал - лучше всего использовать максимально понятные конструкции, хотя часто без таких "изворотов" сложно обойтись.

Обновлены расширения PECL а также добавлены новые, в частности новая версия расширения для работы с базой данных SQLite 3. Более существенно то, что теперь можно использовать новое расширение для базы MySQL - MySQLnd, которое позиционируется как универсальный способ взаимодействия РНР и базы MySQL в замену более ранним драйверам libmysql. Это повлекло за собой обновление и механизма PDO. Кстати, в первом официальном билде под Win32 планируется использовать именно MySQLnd как драйвер по умолчанию для доступа - сама же сборка планируется на конец июля.

Что интересно, теперь некоторые расширения и возможности нельзя отключить, например, через конфигурацию php.ini - это касается PCRE  (Perl Compatible Regular Expressions), Reflection и SPL (Standard PHP Library).

В PHP и стандартных модулях появилось некоторое число новых функций. В частности, добавлены новые функции для работы с датами (date_add, date_sub, date_diff, date_parse_from_format и некоторые другие). Теперь работать с датами и вычислять нужную станет немного легче, без необходимости применять промежуточный формат UNIX Time или сторонние библиотеки. Появились новые математические функции для работы с тригонометрическими данными, логарифмами и экспонентой, новые функции для работы с сетью, строками, разделяемой памятью и некоторые другие. Что важно, некоторые функции стали доступными теперь и на Win32 платформе.

В ядре РНР также добавились новые параметры, в частности, возможность управлять сборщиком мусора - это должно помочь в оптимизации использования памяти, особенно для нагруженных и сложных систем.

Так как модули SPL и Phar (работа с архивами) стали частью дистрибутива, то добавлены новые классы и функции, доступные без необходимости настраивать модули.

Для Win32 платформы важные изменения в поддержке ОС - теперь РНР будет требовать для работы только операционные системы от Win 2000 и выше, поддержка прежних систем отключена. Это и к лучшему - нет необходимости поддерживать устаревшие и уже неактуальные системы.

Появились новые константы, в частости, новые уровни ошибок - E_DEPRECATED и E_USER_DEPRECATED (насколько я понял - это исключение будет выбрасываться для кода, который устаревший и может не поддерживаться в следующих версиях РНР), а также несколько констант связанных с версиями РНР, константа для объявления пространств имён и некоторые другие.

Хорошая новость для тех, кто использует СУБД Firebird совместно с PDO - обновился соответствующий драйвер доступа.

Из других изменений - обновился парсер для ini файла, который теперь разрешает и htaccess-стиль определения настроек.

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

Изменения коснулись и функций шифрования. Ранее не всегда функция crypt() которая отвечает за шифрование алгоритмами MD5, DES и Blowfish была доступна и зависела от реализации в других библиотеках, в частности, libcrypt. Теперь в РНР есть собственные реализации этих алгоритмов и они будут использованы, если нет возможности получить доступ к внешним библиотекам.

Теперь функции для работы с массивами next и current не могут больше работать с объектами как с массивами, для этого придётся преобразовывать объект сначала вручную в массив.

Из интересного, но редко применимого - появился оператор GOTO, который, на мой взгляд, достаточно незаслуженно пинают за плохой стиль - есть класс ПО которое очень сложно или почти невозможно написать и написать эффективно без него. Впрочем, для хорошего разработчика это просто еще одна возможность, а плохому и так уже ничего не поможет 🙂

Появилась возможность задавать псевдонимы для функций через специальную функцию class_alias.

Вот, по моему и все. Часть информации взята из официальной новости, остальное по крупицам выискивалось среди примечаний к релизу, спискам изменений и страницам вики (даже в разделе недокументированные возможности). Теперь будем ожидать появление официальных сборок для win32 платформы чтобы попробовать это все в деле.

  1. 17 сентября 2008 в 11:41 | #1

    А когда появится официальная сборка для win32, еще неизвестно? Она будет здесь выложена?

    За статью спасибо, очень информативно. Правда, малодоходчиво местами 😉

  2. 17 сентября 2008 в 19:44 | #2

    она уже доступная, выложена у них на сайте, я никогда никакие файлы здесь не выкладывал. зайдите на php.net там уже есть доступно для загрузки

  3. 19 мая 2009 в 14:56 | #3

    windows.php.net бюлды для виндоус

Комментирование отключено.