Modifications entrainant une incompatibilité ascendante
 
  PHP Core
  
   Accès de type tableau des non-tableaux
   
    Essayer d'utiliser des valeurs de type null, bool, int, float ou ressource comme un tableau (comme $null["clé"]) va maintenant générer un avis.
    
   
   
  
  
   mot-clé fn
   
    fn est maintenant un mot-clé réservé. En particulier, il ne 
    peut plus être utilisé comme une fonction ou un nom de classe.
    Il peut encore être utilisé comme une méthode ou un nom de constante de classe.
   
   
  
   <?php tag à la fin du fichier
   
    <?php à la fin du fichier (sans nouvelle ligne)
     sera désormais interprété comme une balise PHP d'ouverture.  Auparavant, il 
    était interprété soit comme une balise courte d'ouverture suivie d'une 
    php littérale et aboutissait à une erreur de syntaxe 
    (avec short_open_tag=1) ou était interprété comme une chaîne 
    <?php (avec  short_open_tag=0).
   
   
  
  
   Sérialisation
   
    Le format o de sérialisation a été supprimé.
    Comme il n'est jamais produit par PHP, cela peut seulement briser la désérialisation 
    des chaînes construites manuellement.
   
   
  
   Constantes d'algorithme de mot de passe
   
    Les identificateurs d'algorithme de hachage de mot de passe sont maintenant des chaînes nullables plutôt que des entiers.
   
   
   
    Les applications utilisant correctement les constantes PASSWORD_DEFAULT,
    PASSWORD_BCRYPT, PASSWORD_ARGON2I, et PASSWORD_ARGON2ID continueront à 
    fonctionner correctement.
   
   
  
   
   
    htmlentities() va maintenant lever un avis (au lieu d'un 
    avertissement de normes strictes) s'il est utilisé avec un codage pour lequel 
    seule la substitution d'entité de base est supportée, auquel cas il est 
    équivalent à htmlspecialchars().
   
   
  
   
   
     fread() et fwrite() vont maintenant retourner false si l'opération échoue.
    Auparavant, une chaîne vide ou 0 était retourné(e).
    EAGAIN/EWOULDBLOCK ne sont pas considérés comme des échecs.
   
   
    Ces fonctions soulèvent également un avis sur l'échec, par exemple lorsque 
    vous essayez d'écrire à une ressource de fichier en lecture uniquement.
   
   
  
 
  BCMath Arbitrary Precision Mathematics
  
   Les fonctions BCMath avertiront désormais si un nombre non bien formé est 
   adopté, tel que "32foo". L'argument sera interprété comme 
   zéro, comme avant.
  
  
 
  CURL
  
   Tenter de sérialiser une classe CURLFile va maintenant 
   générer une exception. Auparavant, l'exception n'était lancée que sur la désérialisation.
  
  
   L'utilisation de CURLPIPE-HTTP1 est dépréciée et n'est plus 
   prise en charge à partir de cURL 7.62.0.
  
  
   Le paramètre $version de curl_version () 
   est déprécié. Si une valeur n'est pas égale à la valeur par défaut
   CURLVERSION_NOW est passé, un avertissement est levé et 
   le paramètre est ignoré.
  
  
 
  Date et heure
  
   Appeler var_dump() ou similaire sur une instance  
   DateTime ou DateTimeImmutable ne 
   laissera plus de propriétés accessibles sur l'objet.
  
  
   La comparaison des objets DateInterval (à l'aide de 
   ==, <, etc.) va maintenant générer 
   un avertissement et toujours retourner false. Auparavant, tous les objets
   DateInterval étaient considérés comme égaux, 
   à moins qu'ils n'aient des propriétés.
  
  
 
 
  MySQLi
  
   La fonctionnalité du serveur intégré a été supprimée. Elle a été cassée depuis 
   au moins PHP 7.0.
  
  
   La propriété non documentée mysqli::$stat a été supprimée au 
   profit de mysqli::stat().
  
  
 
  OpenSSL
  
   La fonction openssl_random_pseudo_bytes()
   lance une exception dans les situations d'erreur, semblable à random_bytes().
   En particulier, une Error est lancée si le nombre d'octets demandés est inférieur ou égal à zéro, et une  Exception est lancée si un caractère aléatoire suffisant ne peut pas être recueilli.
   L'argument de sortie $crypto_strong est garanti d'être toujours true si la fonction ne lance pas d'exception, afin de vérifier explicitement qu'il n'est pas nécessaire.
  
  
 
  Expressions régulières (compatible Perl)
  
   Lorsque le mode PREG_UNMATCHED_AS_NULL est utilisé, les 
   groupes de capture non trouvés seront désormais également réglés à null (ou 
   [null, -1] si la capture offset est activée).   Cela signifie 
   que la taille de  $matches sera toujours la même.
  
  
 
  PHP Data Objects
  
   Une tentative de sérialisation d'une instance de PDO ou
   PDOStatement  va désormais générer une 
   Exception plutôt qu'une PDOException, 
   compatible avec d'autres classes internes qui ne prennent pas en charge la sérialisation.
  
  
 
  Reflection
  
   Les objets Reflection génèrent désormais une exception si une tentative est faite 
   pour les sérialiser. La sérialisation des objets Reflection n'a jamais été prise 
   en charge et a donné lieu à des objets Reflection corrompus. Il a été explicitement 
   interdit maintenant.
  
  
   La valeur des constantes de classe de ReflectionClassConstant,
   ReflectionMethod et ReflectionProperty
   ont été changé.
  
  
 
  Bibliothèque PHP standard (SPL)
  
   L'appel get_object_vars() sur une instance   
   ArrayObject retournera toujours les propriétés de 
   l'ArrayObject lui-même (ou d'une sous-classe).
   Auparavant, il retournait les valeurs du tableau/objet à moins que le drapeau 
   ArrayObject::STD_PROP_LIST n'ait été spécifié.
  
  
   Les autres opérations touchées sont les suivantes :
  
  
   - 
    
     ReflectionObject::getProperties()
    
   
- 
    
     reset(), current(), etc.
     Utiliser plutôt les méthodes d'Iterator.
    
   
- 
    
     Potentiellement d'autres fonctions travaillant sur les propriétés de l'objet comme une liste,
     e.g. array_walk().
    
   
   Les modifications de type (array) ne sont pas affectées. 
   Elles continueront à retourner soit le tableau enveloppé, soit les propriétés 
   ArrayObject, selon que le drapeau 
   ArrayObject::STD_PROP_LIST est utilisé.
  
  
   SplPriorityQueue::setExtractFlags() lancera une exception 
   si zéro est passé. Auparavant, cela générerait une erreur fatale récupérable 
   lors de la prochaine opération d'extraction.
  
  
   ArrayObject, ArrayIterator,
   SplDoublyLinkedList et SplObjectStorage
   gèrent maintenant __serialize() et __unserialize()
   en plus de l'interface Serializable.
   Cela signifie que les charges utiles de sérialisation créées sur les anciennes 
   versions PHP peuvent toujours être désérialisées, mais les nouvelles charges 
   utiles créées par PHP 7.4 ne seront pas compatibles par les anciennes versions.
  
  
 
  Tokenizer
  
   token_get_all() émettra maintenant un jeton 
   T-BAD-CHARACTER pour les caractères inattendus au lieu de 
   laisser derrière eux des trous dans le flux de jetons.
  
  
 
  Cookies entrants
  
   Depuis PHP 7.4.11, les noms des cookies entrants ne sont plus
   url-décodés pour des raisons de sécurité.