Релиз PHP 5.6.0

Сегодня вышел PHP 5.6.0. Ура! Сейчас разработчики работают над PHP 7 и PHPNG, пока мы осваиваем новые возможности новой версии. Пока серверы с моими проектами обновлять не буду, но новые проекты несомненно попробую написать в PHP 5.6.0. Дальше я опишу новые возможности топовой версии PHP.

Типы MIME в CLI-сервере

Типы MIME в PHP могут быть использованы для вывода контента, отличного от text/html. При запуске скрипта PHP вывод по умолчанию будет text/html, но используя дополнительные заголовки можно указать тип вывода.

Поддержка скалярных выражений в константах

Теперь можно будет делать так:

class C {
    const ONE = 1;
    const TWO = ONE * 2;

    public function f($a = self::TWO) {
        return $a;
    }
}
Функции с переменным числом аргументов

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

function f(...$params) {
    var_dump($params); // Array, containing arguments
}

f(1);
f(1, 2);
f(1, 2, 3);
Распаковка аргументов

Следом за предыдущим нововведением идет передача аргументов массивом:

$args = ['John', 'Lennon', null, true];
f(...$args);
f('John', 'Lennon', null, true); // It's the same
Экспоненциальный оператор

Оператор в виде двух звездочек для возведения числа в степень.

$a = 2 ** 4; // 16
$a **= 2; // 256
use function и use const

Оператор use был дополнен для возможности импорта констант и функции в классы.

namespace My\Space {
    const FOO = 1;

    function f() {
        return 2;
    }
}

namespace {
    use const Name\Space\FOO;
    use function Name\Space\f;

    echo FOO; // 1
    echo f(); // 2
}
phpdbg встроен по умолчанию
UTF-8

default_charset из php.ini теперь используется как кодировка по умолчанию для htmlentities, htmlspecialchars, html_entity_decode. И значение по умолчанию для этого свойства — UTF-8.

php://input

Теперь может вызываться более одного раза в приложении.

Можно загружать файлы размером больше 2GB

Ограничение я пока определить не смог.

Перегрузка операторов в GMP

Сейчас можно использовать стандартные скалярные выражения вместо вызова функций gmp_…

Магический метод __debugInfo()

Разработчик может добавить этот метод в свой класс, который может возвращать любые данные. Они будут выведены в том случае, когда объект будет передан в функцию var_dump().

Улучшена поддержка ZIP

В библиотеку ZIP было добавлено несколько улучшений, особенно в виде новых методов. Один из них, который особенно выделяется — ZipArchive::setPassword($password), который позволяет легко создавать ZIP-архивы, защищенные паролем.

Заключение

Буду рад обсудить эти нововведения в комментариях, возможно, кто-то уже успел что-то запушить на боевой сервер.