Évolutions incompatibles avec les versions précédentes
Conversion des clés numériques dans les objets et tableaux lors de cast
Les clé numériques sont maintenant mieux appréhendées lors de cast
d'un tableau en objet et d'un objet en tableau (cast explicite ou par
la fonction settype()).
Cela signifie que les clés représentées par un entier (ou un entier sous
forme de texte) d'un tableau casté en objet sont désormais accessibles :
Et les clés au format entier (ou entier sous forme de texte) des objets convertis
en tableaux sont désormais accessibles :
Interdire de passer null
à get_class()
Auparavant, passer null
à la fonction get_class()
retournait le nom de la classe en cours. Ce comportement a été supprimé,
une erreur E_WARNING
est affichée à la place.
Pour retrouver le même comportement qu'avant, l’argument devrait
simplement être supprimé.
Avertir lors du comptage de types non dénombrables
Un E_WARNING
sera émis lors de la tentative
d'utilisation de la fonction count() sur un
type non dénombrable (cela inclut la fonction alias
sizeof()).
Remplacement ext/hash de ressources en objets
Dans le cadre de la migration à long terme des ressources, l’extension
Hash a été mise à jour pour utiliser les
objets au lieu de ressources. Le changement devrait être transparent pour
les développeurs PHP, à l’exception où des vérifications avec
is_resource()
ont été faites (il sera nécessaire de remplacer par
is_object()).
Améliorer les valeurs par défaut SSL/TLS
Les modifications suivantes concernant les valeurs par défaut ont été apportées :
-
tls://
maintenant par défaut TLSv1.0 ou TLSv1.1 ou TLSv1.2
-
ssl://
est un alias de tls://
-
STREAM_CRYPTO_METHOD_TLS_*
constantes par défaut de
TLSv1.0 ou TLSv1.1 + TLSv1.2, à la place de TLSv1.0 uniquement.
gettype() valeur de retour sur les ressources fermées
Auparavant, l'utilisation de gettype() sur une ressource
fermée retournait une chaîne "unknown type"
. Maintenant,
la chaîne "resource (closed)"
sera retournée.
is_object() et __PHP_Incomplete_Class
Auparavant, l'utilisation de is_object() sur la classe
__PHP_Incomplete_Class retournait false
.
Maintenant, true
sera retourné.
Augmentation du niveau d'erreur des constantes non définies
Les références non qualifiées aux constantes non définies généreront
désormais une E_WARNING
(à la place d'une E_NOTICE
).
Dans la prochaine version majeure de PHP, elles généreront une exception
Error.
Prise en charge de Windows
Les versions minimales officiellement supportées pour Windows sont Windows 7/
Server 2008 R2.
Vérification des valeurs par défaut des propriétés des traits
Les contrôles de compatibilité sur les valeurs par défaut des propriétés de trait n'effectueront plus la conversion.
object
pour les noms de classes
Le nom object
était précédement soft-réservé en PHP 7.0.
Il est maintenant réservé, interdisant son utilisation comme nom de classe,
de trait ou d'interface.
Prise en charge de NetWare
La prise en charge de NetWare a maintenant été supprimée.
Alors que array_unique() avec SORT_STRING
copiait anciennement le tableau et supprimait des éléments non uniques
(sans emballer le tableau par la suite), maintenant un nouveau tableau
est construit en ajoutant les éléments uniques.
Cela peut entraîner des index numériques différents.
bcmod() change pour des nombres décimaux
La fonction bcmod() ne tronque plus les nombres
fractionnaires en entiers. En tant que tel, son comportement suit maintenant
fmod(), plutôt que l'opérateur %
.
Par exemple bcmod('4', '3.5')
retourne maintenant
0.5
à la place de 1
.
L'option JSON_OBJECT_AS_ARRAY
de la fonction
json_decode() est maintenant utilisée si le second paramètre
(assoc) est null
. Précédemment JSON_OBJECT_AS_ARRAY
a
toujours été ignoré.
Les séquences générées par rand() et
mt_rand() pour des cas spécifiques peuvent différer
de PHP 7.1 sur les machines 64 bits (en raison de la correction d'un bug
dans l'implémentation de la polarisation du modulo).
Suppression du paramètre INI sql.safe_mode
Le paramètre INI sql.safe_mode
a maintenant été supprimé.
Incoming Cookies
Depuis PHP 7.2.34, les noms des cookies entrants ne sont plus
url-décodés pour des raisons de sécurité.