Главная > Open Source, PHP, Разное > PHP 5.3 snapshot — «иду на вы» или ждите скоро нас в enterprise.

PHP 5.3 snapshot — «иду на вы» или ждите скоро нас в enterprise.

19 октября 2007

php logoВчера у нас был очень удачный день на статьи - вышло сразу два материала, в том числе и первый материал моего друга и соавтора этого блога, на тему нововведений в следующем релизе MS Visual Studio и языке C#. Ну а сегодня мы посмотрим на рынок корпоративной разработки немножко под другим углом. Как известно, язык РНР очень часто отказываются рассматривать как серьёзную среду для разработки корпоративных приложений, основанных на веб-платформе. В частности, серьёзными аргументами выдвигается тезис о том, что сам язык имеет слабую и явно недостаточную поддержку современных технологий и ОО модели. Да что говорить, в этом есть доля правды, к примеру, только в следующем, 6.0 релизе обещается полный переход на использование UTF кодировки. Хотя, с другой стороны, если отвлечься от дебатов и не "принимать близко к сердцу" все сказанное, то вполне мирно существуют реальные бизнес-приложения и высоконагруженные веб-системы, основанные на PHP, для примера назову только два имени: Wikipedia и SugarCRM.

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

Одно из них заключается в интеграцию нового драйвера для доступа к базе данных MySQL - mysqlnd, который пришел на замену, по видимому, всем остальным драйверам вместе - и устаревшему mysql, и появившемуся вслед за ним для раскрытия всех функций релизов 4.1 и выше СУБД mysqli, и даже универсальному драйверу из подсистемы PDO. Компания MySQL будет теперь продвигать только этот драйвер как основной и стандартный для доступа к их СУБД, так что, по видимому, придеться смириться. В чем то это хорошая новость, в свете того, что сначала ветка 5.0 РНР не имела встроенного доступа к MySQL, который был исключён по лицензионным соображениям, и был только в виде подключаемого расширения.

Наконец для адептов ООП появилась поддержка пространств имен (namespace). Об этом написали уже многие зарубежные авторы, так что особо повторятся нет смысла, хотя, если будут вопросы, для этого выделим отдельную статью. Пока же перевел тестовый сервер разработчиков под новую версию - все работает, по крайней мере, старый код не упал.

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

Со статическими методами связано и еще одно изменение - появление служебного метода (magic function) __callStatic, которая аналогично методу __call и предназначена для перехвата обращений к несуществующим статическим методам класса.

Оригинальная методика вызова статических методов (Dynamic static calls) - можно присвоить переменной имя класса в виде строки, а потом вызвать метод так, как будто эта переменная содержит сам экземпляр класса. Пример:

  1.  
  2. $c = "classname";$c::someMetod();

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

Частично изменилось и само ядро РНР, к примеру, улучшена работа с памятью, константные величины теперь помещаются в область памяти, доступную только для чтения.

Теперь РНР работает только в режиме FastCGI, и он в текущей версии не может быть отключен. Это очень радует, потому что теперь без применения лишних модулей и "хаков" системы можно значительно улучшить обработку запросов в высоконагруженных системах.

Остальные изменение коснулись, в основном, дополнительных расширений - обновлены расширения для работы с SOAP (улучшена обработка XMLShema формата), а также довольно значительно обновлен модуль для работы с OpenSSL. Исправлены также серьёзные баги в часто используемых функциях и конструкциях - __autoload, defined, preg_split, ini_get.

Что можно сказать в заключение? Основным нововведением, конечно, стали namespace, mysqlnd и включенный всегда FastCGI, хотя остальные, менее заметные правки и расширения значительно облегчают разработку и отладку серьёзных проектов. Поэтому если вы связаны с веб-разработкой и часто используете РНР в своей работе, очень советуем скачать новую версию и попробовать ее, пусть даже в  статусе тестового релиза.

Ссылки по теме:

  1. 2 февраля 2009 в 20:11 | #1

    Млин… Сделали бы Dynamic static calls пораньше.. в версии, скажем, 5.1.. Пока на 5.3 переходить не собираюсь, а dsc позарез надо=(

    • 2 февраля 2009 в 20:17 | #2

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

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