Изменения, ломающие обратную совместимость
Несмотря на то, что большая часть существующего кода PHP 5 должна работать без изменений, все же ознакомьтесь с некоторыми изменениями, которые могут сказаться на обратной совместимости:
Ключи массива не будут перезаписаны при определении массива как свойства класса через литерал массива
Ранее в массивах, заданные как свойства класса со смешанными явными и неявными ключами, элементы с явно заданными ключами могли молча перезаписываться, если явный ключ пересекался с последовательным неявным ключом. Например:
<?php
class C {
const ONE = 1;
public $array = [
self::ONE => 'foo',
'bar',
'quux',
];
}
var_dump((new C)->array);
?>
Результат выполнения данного примера в PHP 5.5:
array(2) { [0]=> string(3) "bar" [1]=> string(4) "quux" }
Результат выполнения данного примера в PHP 5.6:
array(3) { [1]=> string(3) "foo" [2]=> string(3) "bar" [3]=> string(4) "quux" }
Строгость json_decode()
Теперь json_decode() в соответствии со
спецификацией JSON отклоняет JSON литералы
true
, false
и
null
, заданные не строго в нижнем регистре,
и, соответственно, устанавливает
json_last_error(). Ранее данные,
передаваемые в json_decode() и
содержащие исключительно одно из этих значений в верхнем
или смешанном регистре, принимались.
Это изменение повлияет только в случае передачи в json_decode() некорректного JSON. В случае корректно сформированного JSON, никакого эффекта не будет.
Теперь потоковые обертки по умолчанию проверяют сертификаты точек при использовании SSL/TLS
Все шифруемые клиентские потоки теперь по умолчанию включают проверку пиров. По умолчанию используется OpenSSL CA пакет для проверки сертификата пира. В большинстве случаев не требуется ничего делать для соединения с серверами с правильным SSL сертификатом, так как обычно OpenSSL уже настроен для использования хороших CA пакетов.
Стандартный CA пакет может быть переопределен глобально с помощью
установки или openssl.cafile или openssl.capath строк конфигурации,
или же на уровне каждого запроса используя опции контекста
cafile
или
capath
.
Хотя это и не рекомендуется, но можно отклчить проверку сертификата пира
для запроса, установив verify_peer
опцию контекста в false
, и можно отключить проверку имени пира, установив
verify_peer_name
в false
.
Теперь ресурсы GMP являются объектами
Теперь ресурсы GMP является объектами. Функциональное API, реализованное в расширении GMP, осталось без изменений. Существующий код должен заработать без изменений, только если в нем явно не использовались проверки на ресурс is_resource() или что-то подобное.
Теперь функция Mcrypt требует корректные ключи и IV
mcrypt_encrypt(), mcrypt_decrypt(), mcrypt_cbc(), mcrypt_cfb(), mcrypt_ecb(), mcrypt_generic() и mcrypt_ofb() больше не принимают ключи и IV с некорректной длиной, а режимы блочного шифра, требующие IV, будут завершаться с ошибкой, если его не передать.