Теперь можно предоставить скалярное выражение, которое включает числовые и строковые литералы и (или) константы, когда раньше ожидалось статическое значение, например, в объявлениях констант или значениях аргументов функций по умолчанию.
<?php
const ONE = 1;
const TWO = ONE * 2;
class C
{
    const THREE = TWO + 1;
    const ONE_THIRD = ONE / self::THREE;
    const SENTENCE = 'Значение константы THREE - '.self::THREE;
    public function f($a = ONE + self::THREE)
    {
        return $a;
    }
}
echo (new C)->f()."\n";
echo C::SENTENCE;
?>Результат выполнения приведённого примера:
4 Значение константы THREE — 3
   Массив (array) также определяют через ключевое слово
   const:
  
<?php
const ARR = ['a', 'b'];
echo ARR[0];
?>Результат выполнения приведённого примера:
a
...
   Функции с переменным количеством аргументов
   теперь разрешается реализовывать через оператор ..., вместо того
   чтобы полагаться на функцию func_get_args().
  
<?php
function f($req, $opt = null, ...$params)
{
    // Переменная $params — массив, который содержит остальные аргументы
    printf(
        '$req: %d; $opt: %d; количество параметров: %d' . "\n",
        $req,
        $opt,
        count($params)
    );
}
f(1);
f(1, 2);
f(1, 2, 3);
f(1, 2, 3, 4);
f(1, 2, 3, 4, 5);
?>Результат выполнения приведённого примера:
$req: 1; $opt: 0; количество параметров: 0 $req: 1; $opt: 2; количество параметров: 0 $req: 1; $opt: 2; количество параметров: 1 $req: 1; $opt: 2; количество параметров: 2 $req: 1; $opt: 2; количество параметров: 3
...
   Массивы и объекты, которые реализуют
   интерфейс Traversable, разрешается распаковывать
   в список аргументов при вызове функций и передаче аргументов через оператор ....
   В других языках, включая Ruby, оператор знают как splat- или spread-оператор.
  
<?php
function add($a, $b, $c)
{
    return $a + $b + $c;
}
$operators = [2, 3];
echo add(1, ...$operators);
?>Результат выполнения приведённого примера:
6
**
   Добавили правоассоциативный оператор **
   возведения в степень, и короткий синтаксис **= присваивания.
  
<?php
printf("2 ** 3 ==      %d\n", 2 ** 3);
printf("2 ** 3 ** 2 == %d\n", 2 ** 3 ** 2);
$a = 2;
$a **= 3;
printf("a ==           %d\n", $a);
?>Результат выполнения приведённого примера:
2 ** 3 == 8 2 ** 3 ** 2 == 512 a == 8
use function и use const
   Оператор
   use
   расширили, чтобы в дополнение к классам
   поддержать импорт функций и констант.
   Конструкция use function импортирует функции,
   а конструкция use const — константы.
  
<?php
namespace Name\Space {
    const FOO = 42;
    function f()
    {
        echo __FUNCTION__."\n";
    }
}
namespace {
    use const Name\Space\FOO;
    use function Name\Space\f;
    echo FOO."\n";
    f();
}
?>Результат выполнения приведённого примера:
42 Name\Space\f
Теперь PHP содержит интерактивный отладчик phpdbg, который реализовали как SAPI-модуль. Подробности даёт документация к модулю phpdbg.
Для функций htmlentities(), html_entity_decode() и htmlspecialchars() добавили директиву default_charset, которая устанавливает набор символов по умолчанию. Обратите внимание: при установке параметров кодировки для модулей iconv и mbstring, которые теперь устарели, они будут иметь приоритет над ini-параметром default_charset для функций модулей iconv и mbstring.
   Значение по умолчанию для настройки — UTF-8.
  
php://input
  
   Поток php://input
   теперь разрешается переоткрывать и считывать столько раз, сколько требуется.
   Эта работа также значительно сократила объём памяти, который требуется для обработки
   данных POST-запросов.
  
Теперь разрешается загружать файлы размером больше 2 ГБ.
Объекты GMP теперь поддерживают перегрузку операторов и приведение к скалярным типам. Перегрузка операторов делает код с функциями модуля GMP выразительнее:
<?php
$a = gmp_init(42);
$b = gmp_init(17);
if (version_compare(PHP_VERSION, '5.6', '<')) {
    echo gmp_intval(gmp_add($a, $b)), PHP_EOL;
    echo gmp_intval(gmp_add($a, 17)), PHP_EOL;
    echo gmp_intval(gmp_add(42, $b)), PHP_EOL;
} else {
    echo $a + $b, PHP_EOL;
    echo $a + 17, PHP_EOL;
    echo 42 + $b, PHP_EOL;
}
?>Результат выполнения приведённого примера:
59 59 59
Добавили функцию hash_equals() для сравнения двух строк за постоянное время. Функция снижает риск атаки по времени; например, во время тестирования хеширования паролей функцией crypt(), когда невозможно использовать функции password_hash() и password_verify(), которые не чувствительны к атакам по времени.
<?php
$expected  = crypt('12345', '$2a$07$usesomesillystringforsalt$');
$correct   = crypt('12345', '$2a$07$usesomesillystringforsalt$');
$incorrect = crypt('1234',  '$2a$07$usesomesillystringforsalt$');
var_dump(hash_equals($expected, $correct));
var_dump(hash_equals($expected, $incorrect));
?>Результат выполнения приведённого примера:
bool(true) bool(false)
__debugInfo()Добавили магический метод __debugInfo(), который разрешает объектам изменять свойства и значения, которые отображаются при выводе объекта функцией var_dump().
<?php
class C
{
    private $prop;
    public function __construct($val)
    {
        $this->prop = $val;
    }
    public function __debugInfo()
    {
        return [
            'propSquared' => $this->prop ** 2,
        ];
    }
}
var_dump(new C(42));
?>Результат выполнения приведённого примера:
object(C)#1 (1) {
  ["propSquared"]=>
  int(1764)
}
   Добавили алгоритм хеширования gost-crypto.
   Алгоритм реализует функцию хеширования GOST, с которой работают в таблицах CryptoPro S-box,
   которые определяет секция 11.2 стандарта » RFC 4357.
  
В поддержку протоколов SSL/TLS в PHP 5.6 внесли широкий спектр улучшений. К улучшениям относятся: включение одноранговой проверки по умолчанию, поддержка сопоставления отпечатков сертификатов, снижение защита от атак повторного согласования по протоколу TLS и много новых параметров SSL-контекста, которые помогают точнее контролировать параметры протокола и проверки при работе с зашифрованными потоками.
Подробнее изменения описывает раздел руководства «Изменения OpenSSL в PHP 5.6.x».
   Модуль pgsql теперь поддерживает асинхронные
   соединения и запросы, чем разрешает неблокирующее взаимодействие с базами данных
   PostgreSQL. Асинхронные соединения разрешается устанавливать через константу
   PGSQL_CONNECT_ASYNC, а новые функции
   pg_connect_poll(), pg_socket(),
   pg_consume_input() и pg_flush() помогают
   обрабатывать асинхронные соединения и запросы.
  
