Évolutions incompatibles avec les versions précédentes
Empêcher number_format() de retourner zéro négatif
Auparavant, il était possible pour la fonction number_format() retourne -0. Bien que cela soit parfaitement valide conformément à la norme "IEEE 754 floating point spécification", cette bizarrerie n'était pas souhaitable pour l’affichage des nombres mis en forme sous une forme lisible par l'homme.
<?php
var_dump(number_format(-0.01)); // maintenant affiche string(1) "0" à la place de string(2) "-0"
Conversion des clés numériques dans les objets et tableau lors de cast
Les clé numériques sont maintenant mieux appréhendées lors de cast d'un tableau en objets et d'objets en tableaux (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 :
<?php
// tableau vers un objet
$arr = [0 => 1];
$obj = (object)$arr;
var_dump(
$obj,
$obj->{'0'}, // désormais accessible
$obj->{0} // désormais accessible
);
L'exemple ci-dessus va afficher :
object(stdClass)#1 (1) { ["0"]=> // désormais clé texte plutôt qu'une clé entière int(1) } int(1) int(1)
Et entier (ou entier sous forme de texte) clés des objets casté en tableaux sont désormais accessibles :
<?php
// objet vers tableau
$obj = new class {
public function __construct()
{
$this->{0} = 1;
}
};
$arr = (array)$obj;
var_dump(
$arr,
$arr[0], // désormais accessible
$arr['0'] // désormais accessible
);
L'exemple ci-dessus va afficher :
array(1) { [0]=> // désormais clé entière plutôt qu'une clé texte int(1) } int(1) int(1)
Interdire de passer NULL
à get_class()
Auparavent, 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é à la place.
Pour retrouver le même comportement qu'avant, l’argument devrait
simplement être supprimé.
Avertir lors du comptage des types non dénombrables
Un E_WARNING
sera émis lors de la tentative de
d'utilisation de la fonction count() sur un
type non dénombrable (cela inclut la fonction alias
sizeof()).
<?php
var_dump(
count(null), // NULL is not countable
count(1), // un entier n'est pas dénombrable
count('abc'), // une chaîne n'est pas dénombrable
count(new stdclass), // un objet qui n'implémente pas l'interface Countable n'est pas dénombrable
count([1,2]) // un tableau est dénombrable
);
L'exemple ci-dessus va afficher :
Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d int(0) int(1) int(1) int(1) int(2)
Remplacement ext/hash de ressources en objets
Dans le cadre de la migration à long terme de 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, ils 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.
bcmod() change pour des nombres décimaux
La fonction bcmod() ne tronque plus les nombres fractionnaires en entier. 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.
Fonctions de hachage et hachages non cryptographiques
Les fonctions hash_hmac(), hash_hmac_file(),
hash_pbkdf2(), et hash_init() (avec
HASH_HMAC
) n'acceptent plus les hachages non cryptographiques.
Options de la fonction json_decode()
L'option JSON_OBJECT_AS_ARRAY
de la fonction
json_decode() est maintenant utilisé si le second paramètre
(assoc) est NULL
. Précédement JSON_OBJECT_AS_ARRAY
a
toujours été ignoré.
Sortie de rand() et mt_rand()
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é.
Version en cache
05/11/2024 17:19:29 Cette version de la page est en cache (à la date du 05/11/2024 17:19:29) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-migration72.incompatible.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.