
11 июня вышла альфа версия долгожданного PHP 7. Этот релиз является началом седьмой ветки. Релиз финальной версии запланирован на ноябрь 2015 года. Под катом приведен неполный список основных нововведений.
- Улучшение быстродействия. PHP 7 работает до двух раз быстрее чем PHP 5.6.
- Добавлена поддержка сокращенной конструкции use:
use Symfony\Component\Console\{ Helper\Table, Question\ChoiceQuestion as Choice, Question\ConfirmationQuestion, };
- Добавлен оператор "??" (Null coalescing operator), позволяющий проверить переменную на существование и вернуть ее значение либо значение по умолчанию.
Например следующая конструкция:
$action = isset($_POST['action']) ? $_POST['action'] : 'index';
Теперь может быть коротко записана так:
$action = $_POST['action'] ?? 'index';
- Добавлена поддержка строк длиной больше 2^31 байт в 64-битных билдах.
- Добавлен метод Closure::call(object $to[, mixed $parameters]), позволяющий вызвать анонимную функцию с произвольным $this.
- Добавлен синтаксис \u{xxxxxx} для строк, позволяющий указывать произвольные Unicode символы в строках.
- В качестве значения констант, объявляемых через define() теперь можно указывать массивы.
- Добавлен новый оператор сравнения <=>, так же известный как «spaceship operator». Конструкция $a <=> $b возвращает -1, 0 или +1 если $a соответственно меньше, равно или больше $b. Удобно использовать в колбэках для usort().
- Зарезервированные ключевые слова теперь можно использовать в качестве имен методов:
$object::new('foo', 'bar')->forEach(function($index, $item) {});
- Синтаксис конструкторов в стиле PHP 4 (имя метода конструктора совпадает с именем класса) теперь считается устаревшим.
- Статичные вызовы (::) нестатичных методов теперь считаются устаревшими.
- Добавлена константа PHP_INT_MIN.
- Удалена INI директива «asp_tags». Попытка включить ее приведет к фатальной ошибке. Так же удалена поддержка тэгов в стиле ASP (<%).
- Удалена INI директива «always_populate_raw_post_data». Переменная $HTTP_RAW_POST_DATA соответственно больше не доступна. Вместо нее используйте дескриптор входного потока php://input.
- Итерация по массиву при помощи foreach() больше не сдвигает внутренний указатель массива, который можно получать и изменять при помощи функций current()/next()/reset() и им подобных. Так же foreach по значению теперь всегда работает с копией массива.
- Оператор левого побитового сдвига (<<) на количество бит, превышающее количество бит в integer теперь всегда возвращает 0. До этого результат зависел от архитектуры процессора. Аналогичный правый сдвиг всегда дает 0 или -1 в зависимости от знака исходного числа (Сдвиг не влияет на старший бит, отвечающий за знак).
- Строки, содержащие шестнадцатеричные числа теперь всегда обрабатываются как строки и не обрабатываются как числа: is_numeric(«0xFF») теперь false, раньше было true со всеми вытекающими.
- Целые числа в 64-х битных билдах для Windows теперь представляются в виде 64-х битных, а не как раньше, 32-х, что делало использование х64 сборок на Windows бессмысленным занятием, если нужны манипуляции с большими числами.
- Удалена поддержка модификатора /e в PCRE. Аналогичная функциональность может быть реализована функцией preg_replace_callback().
- Добавлена поддержка type-hint'ов для скалярных типов. Ранее контроль типов был возможен только для классов, интерфейсов, массивов и типа callable.
- Удалены старые и не поддерживаемые SAPI и расширения.
Более подробный список изменений на английском языке можно найти в указанных источниках:
php.net
github.com/php/php-src/blob/php-7.0.0alpha1/UPGRADING