Вышел PHP 5.3: краткий обзор изменений

Аватар пользователя axel axel 1 июля 2009 в 20:07


Новость взята с opennet.ru, я только поправил неточную ссылку.

После около двух лет разработки выпущен релиз интерпретатора языка программирования PHP 5.3. Наиболее интересные изменения:

  • Значительное увеличение производительности. Например при сравнении одного из снапшотов php 5.3 и последнего стабильного релиза, было замечено увеличение производительности Drupal на 20%, Qdig на 2%, typo3 на 30%, wordpress на 15%, xoops - на 10%.
  • Namespaces - изолированные от остального кода пространства имен для классов, функций и констант.
  • "Late static binding" - привязка к вызываемому классу, вне контекста наследования (возможность получить имя класса, вызванного для выполнения статического метода);
  • Mysqlnd - новый MySQL драйвер, работающий напрямую с MySQL, без использования libmysql.
  • Из состава пакета удален модуль ext/msql, ext/ereg помечен как устаревший, ext/mhash заменен на ext/hash;
  • Реализован метод __callStatic для организации перегрузки статических методов;
  • Поддержка OpenID
  • Изменение техники округления чисел с плавающей точкой;
  • Возможность определения в ini-файле блоков конфигурации с привязкой к директории и имени хоста, для получения функциональности подобной .htaccess;
  • XSLT профайлинг
  • Многоплатформенный getopt()
  • Поддержка Sqlite3 (расширение ext/sqlite3);
  • Опционально включаемый циклический сборщик мусора;
  • Новый синтаксис для определения строковых блоков, ограниченная поддержка GOTO, оператор "?:";
  • Новые расширения: ext/phar,
    ext/intl,
    ext/fileinfo,
    ext/enchant;
  • Поддержка замыканий и лямбда-функций;
  • Возможность ведения подробного лога отправки почты через функцию mail(), что полезно для выявления источника спама в системах хостинга, на которых нередко пытаются рассылать спам через взломанные скрипты пользователей. Кроме ведения лога предусмотрена возможность включения в тело письма заголовка с уточнением из какого именно скрипта и от какого пользователя осуществлена отправка;
  • Более 140 исправлений ошибок.

Список несовместимостей и особенности миграции с прошлых версий PHP описаны в документе "Migrating from PHP 5.2.x to PHP 5.3.x". Например, из комплекта поставки удалены расширения
ext/mhash (см. ext/hash),
ext/msql,
ext/pspell (см. ext/enchant),
ext/sybase (см. ext/sybase_ct); перемещены в PECL:
ext/ming,
ext/fbsql,
ext/ncurses,
ext/fdf; удалена поддержка режима совместимости zend.ze1; у некоторых функций ужесточились требования к передаваемым параметрам.



Конец цитирования. Далее немного моих комментов.

Самыми интересными из этих изменений на мой взгляд выглядит поддержка адекватного синтаксиса lambda-функций и closures, потому как та недоподдержка lambda-фунаций, что была в старых версиях PHP вызывала одни недоумения.
Также любопытно опробовать новый драйвер к MySQL.

А самое забавное это добавление в явном виде инструкции GOTO (в неявном она всегда по сути присутствовала в операторе switch()..case;). В современных языках от goto принято избавляться, но тут девелоперы PHP проявили здоровое чувство юмора.
Инструкция по применению goto на справочной странице php.net дана в виде комикса:

Да, вот именно так его и следует применять. Но чтобы не совсем портить имидж goto разрешено передавать управление только внутри блоков, т.е. из функции в функцию перейти не получится. Бесполезно, но прикольно.

0 Thanks

Комментарии

Аватар пользователя gor gor 1 июля 2009 в 20:17

В моих планах подождать паку релизов (до 5.3.3 например) и внедрять на хостинге.

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 1 июля 2009 в 21:29
"axel" wrote:

Многоплатформенный getopt()

фапаю.
наконец то не будем изъебываться с локалями. рулез.

"gor" wrote:

В моих планах подождать паку релизов (до 5.3.3 например) и внедрять на хостинге.

+1
подождем полгодика. потом поставим в /usr/local

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

Аватар пользователя axel axel 2 июля 2009 в 0:49
Azovsky wrote:

с переводом :)

Ха ) Это надо предложить на ru.php.net в перевод документации )

Аватар пользователя bratello bratello 3 июля 2009 в 19:11

Лямбда конечно полезна, хотя обслуживать такой код без должной поддержки отладчика будет проблематично. Я пока что так и не увидел для себя реального применения замыканий в ПХП, аппликации на ПХП мало ивент дривен, это скорее важно для десктоп приложения, где сообщения случаются на каждое телодвижение пользователя. Позднее статическое связывание - интересная экзотика, возникало несколько ситуаций когда это было нужно, но была возможность обойтись стандартными средствами.

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 4 июля 2009 в 0:49

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

Аватар пользователя vgoodvin vgoodvin 6 июля 2009 в 1:42

Хотелось бы потрогать Mysqlnd.
Но для нас главное прирост производительности Drupal.
Будем ждать внедрения на хостинге.

Аватар пользователя bratello bratello 6 июля 2009 в 20:05

Рост производительности, на мой взгляд, не возможен без инфраструктур распределенных вычислений, в своё время джава прошла через это и выросла в J2E. Друпал, по историческим причинам, уже не в состоянии адаптировать под multi-tier architecture, таким и он и станется для истории.

Аватар пользователя gor gor 6 июля 2009 в 22:07
bratello wrote:

Рост производительности, на мой взгляд, не возможен без инфраструктур распределенных вычислений, в своё время джава прошла через это и выросла в J2E. Друпал, по историческим причинам, уже не в состоянии адаптировать под multi-tier architecture, таким и он и станется для истории.

Не стоит сравнивать среду програмирования и продукт на ней написаный.
Корректнее было бы стравнивать J2E VS PHP
Но так же корректно стоит заметить что это разного направления языки.
Что касается распределения вычислительных мошностей,
За "всего" от $1000/мес я могу орагнизовать отказоустойчивую систему, распределенную на Н серверов. На базе друпал.
Конечно в эту стоимость входит стоимость железа и моих админских услуг. Всегда можно найти пути решения задачи, вопрос их стоимости.

Аватар пользователя bratello bratello 8 июля 2009 в 15:43
gor wrote:
bratello wrote:

Рост производительности, на мой взгляд, не возможен без инфраструктур распределенных вычислений, в своё время джава прошла через это и выросла в J2E. Друпал, по историческим причинам, уже не в состоянии адаптировать под multi-tier architecture, таким и он и станется для истории.

Не стоит сравнивать среду програмирования и продукт на ней написаный.
Корректнее было бы стравнивать J2E VS PHP
Но так же корректно стоит заметить что это разного направления языки.
Что касается распределения вычислительных мошностей,
За "всего" от $1000/мес я могу орагнизовать отказоустойчивую систему, распределенную на Н серверов. На базе друпал.
Конечно в эту стоимость входит стоимость железа и моих админских услуг. Всегда можно найти пути решения задачи, вопрос их стоимости.

Нет, не корректнее было бы так сравнивать. J2E это фреймворк for Java, который предоставляет разработчику системные решения для мульти тайр архитектуры, в ПХП таких решений билт ин нету. На мой взгляд Друпал отлично справляется с задачей уровня презентации, есть сносное решение для уровня данных, но напрочь отсутствует уровень аппликации, или точнее он размыт, каждый разработчик модулей сам для себя решает как выделять логику и насколько отделять ее от презентации или уровня данных. В идеале схема должна выглядеть так:

Presentation Server (PS) -> Application Server (AS) -> DB

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

<?php
//Псевдокод

PS::show_Person() -> AS::get_Person() -> DB::QueryPerson

PS

::show_Person()
{
Person p = AS::get_Person(params)
render_field(p->name)
render_field(p->lname)
render_field(p->address)
...
}

?>

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

Аватар пользователя W32 W32 3 ноября 2009 в 20:17

PHP 5.3 то работает стабильно и быстро, но вот как оказалось много модулей для drupal 6.x несовместимы с ним. И самое печальное, среди них последний Views 6.x - 2.7 и модуль date !

Аватар пользователя axel axel 5 ноября 2010 в 14:18

BTW, drupal.ru некоторое время назад был переведён на PHP 5.3.3.
По прошествию некоторого времени с выхода PHP5.3 и работы с ним хочется увидеть в друпале пространства имён в именах функций вместо устаревшей схемы с префиксами и постфиксами.

Аватар пользователя vgoodvin vgoodvin 5 ноября 2010 в 14:36
"axel" wrote:

По прошествию некоторого времени с выхода PHP5.3 и работы с ним хочется увидеть в друпале пространства имён в именах функций вместо устаревшей схемы с префиксами и постфиксами.

Для этого как минимум новое ядро должно требовать php-5.3 :) А то известно что будет.