Although most existing PHP 5 code should work without changes, please take note of some backward incompatible changes:
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() 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.
Π£ΡΡ ΡΠΈΡΡΠΎΠ²Π°Π½Ρ ΠΊΠ»ΡΡΠ½ΡΡΡΠΊΡ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠ΅ΠΏΠ΅Ρ Π²ΠΌΠΈΠΊΠ°ΡΡΡ ΠΎΠ΄Π½ΠΎΡΠ°Π½Π³ΠΎΠ²Ρ ΠΏΠ΅ΡΠ΅Π²ΡΡΠΊΡ. ΠΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ 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. 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_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.