PHP Conference Nagoya 2025

Backward incompatible changes

Although most existing PHP 5 code should work without changes, please take note of some backward incompatible changes:

Array keys won't be overwritten when defining an array as a property of a class via an array literal

Previously, arrays declared as class properties which mixed explicit and implicit keys could have array elements silently overwritten if an explicit key was the same as a sequential implicit key. For example:

<?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() strictness

json_decode() now rejects non-lowercase variants of the JSON literals true, false and null at all times, as per the JSON specification, and sets json_last_error() accordingly. Previously, inputs to json_decode() that consisted solely of one of these values in upper or mixed case were accepted.

This change will only affect cases where invalid JSON was being passed to json_decode(): valid JSON input is unaffected and will continue to be parsed normally.

Stream wrappers now verify peer certificates and host names by default when using SSL/TLS

Усі шифровані клієнтські потоки тепер вмикають однорангову перевірку. Використовується стандартний пакет CA від OpenSSL для перевірки однорангового сертифіката. Здебільшого не потрібно вносити жодних змін для зв'язку із серверами, що мають дійсні сертифікати SSL, оскільки дистриб'ютори зазвичай налаштовують OpenSSL на використання добре відомих пакетів CA.

Стандартний пакет CA може бути змінений для всього сервера за допомогою директив openssl.cafile або openssl.capath, а також для окремого запиту за допомогою опцій контексту cafile або capath context options.

Хоча це не рекомендується, але можна вимкнути перевірку однорангового сертифіката в запиті, встановивши опцію контексту verify_peer як false, або вимкнути перевірку імені однорангового пристрою, встановивши опцію контексту verify_peer_name як false.

GMP resources are now objects

GMP resources are now objects. The functional API implemented in the GMP extension has not changed, and code should run unmodified unless it checks explicitly for a resource using is_resource() or similar.

Mcrypt functions now require valid keys and IVs

mcrypt_encrypt(), mcrypt_decrypt(), mcrypt_cbc(), mcrypt_cfb(), mcrypt_ecb(), mcrypt_generic() and mcrypt_ofb() will no longer accept keys or IVs with incorrect sizes, and block cipher modes that require IVs will now fail if an IV isn't provided.

cURL file uploads

Uploads using the @file syntax now require CURLOPT_SAFE_UPLOAD to be set to false. CURLFile should be used instead.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top