PHP 5.4.0 released!

Absinthe

жожо
Спустя почти три года с момента выхода ветки 5.3 представлен релиз языка программирования PHP 5.4.0. Среди ключевых особенностей новой ветки отмечается реализация поддержки конструкции "Traits" и сокращенного синтаксиса массивов, увеличение производительности и сокращение потребления памяти, поддержка многобайтовых символов для всех сборок, добавление встроенного web-сервера в SAPI-модуль CLI. В новой ветке удалены некоторые устаревшие возможности языка и опции настройки, поэтому версия 5.4 не обеспечивает полную совместимость на уровне API и конфигурации. При использовании PHP 5.4 может потребоваться модификация приложений и серверных настроек (например, удалена поддержка Safe mode и register_globals).

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

Основные особенности PHP 5.4.0:

Изменения, нарушающие совместимость:
- Прекращение поддержки всех опций, связанных с режимом "Safe mode";
- Прекращение поддержки настроек для автоматического экранирования специальных символов в поступающих из вне данных ("magic quotes");
- Прекращение поддержки синтаксиса "break/continue $var"
- Удаление конфигурационных опций register_globals, define_syslog_variables, highlight.bg, session.bug_compat42, session.bug_compat_warn, y2k_compliance, allow_call_time_pass_reference и register_long_arrays;
- Удаление функций session_is_regisitered(), session_registered() и session_unregister().
- В поставляемых файлах конфигурации в опции default_charset вместо "ISO-8859-1" теперь задана кодировка "UTF-8", но по умолчанию, при отсутствии данной опции, по прежнему используется пустое значение ("");
- Удалена поддержка hash-алгоритмов Salsa10 и Salsa20.
- В расширении Date прекращена поддержка изменения часового пояса через переменную окружения TZ;
- Функция array_combine() отныне возвращает значение array() вместо FALSE, если на вход переданы два пустых массива;


Увеличение производительности и оптимизация потребления памяти в Zend Engine. Работа по оптимизации проведена большая, улучшений очень много и они затрагивают различные части внутренностей PHP. Например, в тесте bench.php производительность PHP возросла на 19%, а в тесте micro_bench.php на 26%. При оценке скорости выполнения реальных приложений (c использованием акселератора APC) отмечается ускорение работы CMS typo3 на 6%, WordPress на 8%, drupal на 2%, xoops на 14% и scrum на 13%;

Поддержка языковой конструкции "Traits", предназначенной для организации повторного использования объектов без изменений существующих объектов;

Поддержка разыменования массивов (например, возвращающую массив функцию можно использовать как "func()['key']");

Поддержка сокращенного синтаксиса задания массивов, например, можно указывать func(["id" => 500, "type" => "account"]) вместо func(array("id" => 500, "type" => "account"));

Интеграция поддержки системы динамической трассировки DTrace;

Поддержка синтаксиса Class::{expr}();

Возможность обращения к членам классов с созданием отдельного экземпляра класса ("(new Foo)->bar()");

Поддержка двоичного формата определения данных (например, 0b001001101);

Новые хэш-функции fnv132, fnv164, joaat;

Интеграция в SAPI-модуль CLI встроенного http-сервера, что позволяет существенно упростить отладку web-приложений на локальных машинах пользователей. Http-сервер ориентирован только на применение для нужд тестирования и отладки, и не рассчитан на применение в роли замены традиционных http-серверов;

Перемещение встроенного расширения ext/sqlite во внешний каталог PECL (изменение не касается sqlite3, поддержка которого будет по прежнему встроена);

Для сборки PHP 5.4 требуется установка пакета autoconf 2.59 или более новой версии (рекомендуется Autoconf 2.60+). Расширены возможности сборки для unix-подобных систем, например, теперь можно одновременно собрать несколько бинарных SAPI из PHP и внешних SAPI-модулей;

Увеличена производительность парсинга запросов в FastCGI;

В $_SERVER['REQUEST_TIME'] теперь передается время с указанием микросекунд ($_SERVER['REQUEST_TIME_FLOAT']);

По умолчанию активирован режим поддержки многобайтовых кодировок (php больше не нужно специально собирать с опцией "--enable-zend-multibyte"). Для выключения поддержки в php.ini добавлена директива zend.multibyte;

Возвращена поддержка замыкания "$this";

Добавлена возможность косвенного вызова методов через массив;

Добавлена поддержка использования ссылок на объекты при рекурсивном вызове serialize();

Увеличена производительность функции unserialize();

Добавлена поддержка "stream metadata API" в класс stream_metadata();

Разнообразные улучшения отмечаются почти во всех стандартных расширениях;

Добавлен вызываемый typehint;

Удален алгоритм угадывания часового пояса. Отныне если часовой пояс не задан явно, используется "UTC";

Расширения mysql, mysqli и pdo_mysql теперь по умолчанию базируются на mysqlnd. В mysqlnd добавлена поддержка именованных каналов. В функцию mysqli_result() из модуля mysqli добавлена поддержка интерфейса Traversable (определение использования в циклах foreach). В pdo_mysql прекращения поддержка связывания с библиотеками MySQL версии младше 4.1;

Новые базовые функции: hex2bin(), http_reponse_code(), get_declared_traits(), getimagesizefromstring(), stream_set_chunk_size(), socket_import_stream(), trait_exists(), header_register_callback(). Дополнительно см. список новых функций в расширениях, а также списки новых глобальных констант, методов и классов (например, JsonSerializable, SessionHandler, SNMP, CallbackFilterIterator);

В SAPI-модуле PHP-FPM добавлена опция process.max для управления числом процессов, порождаемых FPM;

В FastCGI SAPI добавлены совместимые с Apache функции apache_child_terminate(), getallheaders(), apache_request_headers() и apache_response_headers();

В интерактивном CLI-интерфейсе теперь можно на лету менять настройки конфигурации, используя синтаксис "#inisetting=value";

В расширении OpenSSL добавлена поддержка шифрования AES;

Новые директивы конфигурации: cli.pager, cli.prompt, max_input_vars (для ограничения числа элементов в GET/POST/COOKIE), zend.multibyte, session.upload_progress.*, enable_post_data_reading (можно запретить чтение данных для POST-запросов).


Короткий синтаксис массивов
Поддержку примесей
Встроенный веб-сервер для тестирования скриптов
вернули $this/self в анонимные функции (ура!)
добавили флаги в json_encode. Особо интересны JSON_PRETTY_PRINT, JSON_UNESCAPED_UNICODE
добавили JsonSerializable интерфейс, сам знаете зачем
Добавили флаги мультикаста у сокетов
debug_backtrace теперь можно ограничить
Числа можно записывать в бинарном виде 0b1010110. Идеально для битовых масок.
Добавлен callable type hint для функций (уж лучше бы завели тип переменной callback).
(new foo)->bar()
func()[3]
поддержка DTrace для PHP-магов 80го уровня
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Существует рабочие версии xcache или APC под это дело? Пока что у меня с APC оное сегфолтится напрочь =(
 

AmdY

Пью пиво
Команда форума
c0dex
на хабре ребята писали, что всё починили
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
хз что там починили, но memcached я ставил как dev версию, скачанную хз с какого репа на гитхабе, а APC вообще отказался пахать.

PS: dotdeb не предлагать)
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
это даже не имхо, а факт. Просто люблю копаться в свеженьком софте, вот и думал что будет все ок. Ан нет(
 

AmdY

Пью пиво
Команда форума
ихц уже даже хостинг предлагает с php 5.4
 

Absinthe

жожо
ну на девелоперские машины понятно уже, что ставить надо его.
Через пару месяцев и на серверах появляться начнет.
А там глядишь, и на шаред хостингах заменят 5.1 на 5.2.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
на девелоперскую я его уже месяца 2 назад поставил, только ошибку с --debug так и не исправили
похоже, кому-то просто надоело инкременить RC после 8 и решили продолжить инкрементить minor, а стабильности таки нет еще
 

confguru

ExAdmin
Команда форума
Traits

Important Tip: The magic constant for traits is __TRAIT__.

Было
PHP:
/** cURL wrapper trait */
trait cURL
{
    public function curl($url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }
}
 
/** Twitter API Class */
class Twitter_API
{
    use cURL; // use trait here
    public function get($url)
    {
        return json_decode($this->curl('http://api.twitter.com/'.$url));
    }
}
 
/** Facebook API Class */
class Facebook_API
{
    use cURL; // and here
    public function get($url)
    {
        return json_decode($this->curl('http://graph.facebook.com/'.$url));
    }
}
 
$facebook = new Facebook_API();
echo $facebook->get('500058753')->name; // Rasmus Lerdorf
 
/** Now demonstrating the awesomeness of PHP 5.4 syntax */
echo (new Facebook_API)->get('500058753')->name; // Rasmus Lerdorf
$foo = 'get';
echo (new Facebook_API)->$foo('500058753')->name; // and again, Rasmus Lerdorf
echo (new Twitter_API)->get('1/users/show.json?screen_name=rasmus')->name; // and yet again, Rasmus Lerdorf
// P.S. I'm not obsessed with Rasmus :)
Стало
PHP:
trait Net
{
    public function net()
    {
        return 'Net';
    }
}
 
trait Tuts
{
    public function tuts()
    {
        return 'Tuts';
    }
}
 
class NetTuts
{
    use Net, Tuts;
    public function plus()
    {
        return '+';
    }
}
 
$o = new NetTuts;
echo $o->net(), $o->tuts(), $o->plus();
echo (new NetTuts)->net(), (new NetTuts)->tuts(), (new NetTuts)->plus();
 

Eugene Aslanov

Новичок
На предстоящей конференции было бы интересно послушать про использование новшеств из PHP 5.4.0.
 

chupakabra

Новичок
Да печально с xcache ,
Starting php-fpm XCache requires Zend Engine API version 220090626.
The Zend Engine API version 220100525 which is installed, is newer
 

Redjik

Джедай-мастер
Не написано, я просто подумал, что так было бы - самое логичное
 
Сверху