Modifications entrainant une incompatibilité ascendante
 
  Exception en passant trop peu d'arguments de fonction
  
   Auparavant, un avertissement était émis pour invoquer des fonctions définies 
   par l'utilisateur avec trop peu d'arguments. Maintenant, cet avertissement a 
   été promu en une exception d'erreur. Cette modification s'applique uniquement 
   aux fonctions définies par l'utilisateur, et non aux fonctions internes. 
   Par exemple:
  
  
  
 
  Interdire les appels dynamiques aux fonctions d'introspection de portée
  
   Les appels dynamiques pour certaines fonctions ont été interdits (sous la forme 
   de $func() ou array_map('extract', ...), 
   etc.). Ces fonctions inspectent ou modifient une autre étendue, et présentent 
   avec eux un comportement ambigu et non fiable. Les fonctions sont les suivantes:
  
  
  
  
 
  Nom de classe, interface, et trait invalide
  
   Les noms suivants ne peuvent pas être utilisés pour nommer des classes, 
   des interfaces ou des traits:
  
  
  
 
  Les conversions de chaînes numériques respectent désormais la notation scientifique
  
   Les opérations entières et les conversions sur les chaînes numériques respectent 
   désormais la notation scientifique. Cela inclut également l'opération de 
   cast (int) et les fonctions suivantes: 
   intval() (où la base est 10), settype(), 
   decbin(), decoct() et 
   dechex().
  
  
 
  Correctifs à l'algorithme mt_rand()
  
   mt_rand() utilise désormais par défaut la version fixe de 
   l'algorithme Mersenne Twister. Si la sortie déterministe de 
   mt_srand() a été invoquée, alors MT_RAND_PHP peut être utilisé comme
   second paramètre optionnel de mt_srand() pour préserver l'ancienne (et incorrecte) implémentation.
  
  
 
 
  Interdire le caractère de contrôle de suppression ASCII dans les identificateurs
  
   Le caractère de contrôle de suppression ASCII (0X7f) ne peut 
   plus être utilisé dans les identificateurs qui ne sont pas entre guillemets.
  
  
 
  
   error_log change pour la valeur syslog
  
  
   Si le paramètre INI error_log est défini sur 
   syslog, les niveaux d'erreur PHP sont mappés aux niveaux 
   d'erreur syslog. Cela apporte une différenciation plus fine dans les journaux 
   d'erreurs contrairement à l'approche précédente où toutes les erreurs sont 
   enregistrées avec le niveau d'avis uniquement.
  
  
 
  N'appelez pas les destructeurs sur des objets incomplets
  
   Les destructeurs ne sont désormais jamais appelés pour les objets qui lèvent 
   une exception pendant l'exécution de leur constructeur. Dans les versions 
   précédentes, ce comportement dépendait de la question de savoir si l'objet 
   était référencé en dehors du constructeur (par exemple par une exception 
   backtrace).
  
  
 
  
   call_user_func() gestion des arguments de référence
  
  
   call_user_func() va maintenant toujours générer un 
   avertissement sur les appels aux fonctions qui attendent des références comme 
   arguments. Auparavant, cela dépendait de la question de savoir si l'appel était 
   entièrement qualifié.
  
  
   En outre, call_user_func() et 
   call_user_func_array() n'abandonneront plus l'appel de 
   fonction dans ce cas. L'avertissement  "référence attendue" sera émis, mais 
   l'appel va continuer comme d'habitude.
  
  
 
  
   L'opérateur d'index vide n'est plus pris en charge pour les chaînes
  
  
   L'application de l'opérateur d'index vide à une chaîne (par exemple 
   $str[] = $x) lève une erreur fatale au lieu de la 
   convertir silencieusement en tableau.
  
  
 
  Affectation via l'accès d'index de chaîne sur une chaîne vide
  
   La modification de chaîne par caractère sur une chaîne vide fonctionne 
   désormais comme pour les chaînes non vides, c'est-à-dire l'écriture dans 
   un décalage hors plage de la chaîne avec des espaces, où les types non 
   entiers sont convertis en entiers, et seul le premier caractère de la chaîne 
   assignée est utilisé. Autrefois, les chaînes vides étaient silencieusement 
   traitées comme un tableau vide.
   
  
  
 
  Directives ini supprimées
  
   Les directives ini suivantes ont été supprimées :
  
  
   - 
    
     session.entropy_file
- 
    
     session.entropy_length
- 
    
     session.hash_function
- 
    
     session.hash_bits_per_character
 
 
  
   L'ordonnancement des éléments d'un tableau a changé lorsque qu'ils sont créés 
   automatiquement pendant les affectations par référence
  
  
   L'ordre des éléments dans un tableau a changé lorsque ces éléments ont été 
   créés automatiquement en les référençant dans une assignation par référence. 
   Par exemple:
  
  
  
 
  Ordre de tri des éléments égaux
  
   L'algorithme de tri interne a été amélioré, ce qui peut entraîner un 
   ordre de tri différent des éléments, qui se comparaient comme égaux 
   auparavant.
  
  Note: 
   
    Ne comptez pas sur l'ordre des éléments qui se comparent comme égaux; il 
    pourrait changer à tout moment.
   
  
  
 
  Message d'erreur pour les erreurs E_RECOVERABLE
  
   Le message d'erreur pour les erreurs E_RECOVERABLE a été modifié de 
   "Catchable fatal error" à "Recoverable fatal error".
  
  
 
  Paramètre $options de unserialize()
  
   L'élément allowed_classes du paramètre $options de 
   unserialize() est maintenant strictement typé, c'est-à-dire 
   que si une valeur autre qu'un tableau ou un booléen est donnée, unserialize() 
   retourne false et émet un E_WARNING.
  
  
 
  Le constructeur de DateTime incorpore microsecondes
  
   DateTime et DateTimeImmutable 
   intègrent désormais correctement les microsecondes lorsqu'elles sont construites 
   à partir de l'heure actuelle, soit explicitement, soit avec une chaîne relative 
   (par exemple "first day of next month"). Cela signifie que 
   les comparaisons naïves de deux instances nouvellement créées seront désormais 
   plus susceptibles de retourner false au lieu de true:
   
  
  
 
  Conversions des erreurs fatales en exceptions Error
  
   Dans l'extension date, les données de sérialisation invalides pour les classes 
   DateTime ou DatePeriod , ou 
   l'échec de l'initialisation du fuseau horaire à partir de données sérialisées, 
   lèveront désormais une exception Error à partir de la 
   méthode __wakeup() ou  __set_state(), 
   au lieu de se traduire par une erreur fatale.
  
  
   Dans l'extension DBA, les fonctions de modification des données (telles que 
   dba_insert()) lèveront désormais une exception 
   Error au lieu de déclencher une erreur fatale capturable 
   si la clé ne contient pas exactement deux éléments.
  
  
   Dans l'extension DOM, les contextes de validation de schéma ou de RelaxNG non 
   valides lèveront désormais une exception Error au lieu de 
   résulter en une erreur fatale. De même, la tentative d'inscription d'une 
   classe de nœud qui n'étend pas la classe de base appropriée, ou tente de lire 
   une propriété non valide ou d'écrire dans une propriété en lecture seule, lèvera 
   également une exception Error .
  
  
   Dans l'extension IMAP, les adresses de messagerie plus longues que 16385 octets 
   lèveront une exception Error au lieu de se traduire par une 
   erreur fatale.
  
  
   Dans l'extension Intl, le fait de ne pas appeler le constructeur parent dans une 
   classe qui étend Collator avant d'appeler les méthodes 
   parentes lèvera maintenant une Error au lieu d'avoir pour 
   résultat une erreur fatale récupérable. En outre, le clonage d'un objet 
   Transliterator lève désormais une exception 
   Error en cas d'échec du clonage du Transliterator 
   interne au lieu d'une erreur fatale.
  
  
   Dans l'extension LDAP, la fourniture d'un type de modification inconnu à 
   ldap_batch_modify() lèvera désormais une exception 
   Error au lieu d'une erreur fatale.
  
  
   Dans l'extension mbstring, les fonctions mb_ereg() et 
   mb_eregi() lèveront désormais une exception 
   ParseError si une expression PHP non valide est fournie 
   et que l'option 'e' est utilisée.
  
  
   Dans l'extension mcrypt, mcrypt_encrypt() et 
   mcrypt_decrypt() lèveront maintenant une exception 
   Error au lieu d'une erreur fatale si mcrypt ne 
   peut pas être initialisée.
  
  
   Dans l'extension mysqli, la tentative de lecture d'une propriété non valide 
   ou d'écriture dans une propriété en lecture seule lève maintenant une exception 
   Error au lieu de se traduire par une erreur fatale.
  
  
   Dans l'extension Reflection, le fait de ne pas récupérer un objet de réflexion 
   ou de récupérer une propriété d'objet lève maintenant une exception 
   Error au lieu de se traduire par une erreur fatale.
  
  
   Dans l'extension de session, les gestionnaires de session personnalisés qui 
   ne retournent pas de chaînes pour les ID de session lèveront désormais une 
   exception Error au lieu de provoquer une erreur fatale 
   lorsqu'une fonction est appelée pour générer un ID de session.
  
  
   Dans l'extension SimpleXML, la création d'un attribut sans nom ou dupliqué va 
   maintenant lever une exception Error au lieu de générer 
   une erreur fatale.
  
  
   Dans l'extension SPL, une tentative de clonage d'un objet 
   SplDirectory va maintenant lever une exception 
   Error au lieu de générer une erreur fatale.
   De même, appeler ArrayIterator::append() 
   lors de l'itération sur un objet lèvera également une exception
   Error.
  
  
   Dans l'extension standard, la fonction assert(), lorsqu'elle 
   est fournie avec un argument de chaîne comme premier paramètre, lèvera maintenant 
   une exception ParseError au lieu d'une erreur fatale 
   capturable si le code PHP n'est pas valide. De même, l'appel à 
   forward_static_call() en dehors d'une étendue de classe lève 
   maintenant une exception Error .
  
  
   Dans l'extension Tidy, la création manuelle d'un tidyNode 
   lèvera une exception  Error au lieu d'une erreur fatale.
  
  
   Dans l'extension WDDX, une référence circulaire lors de la sérialisation va 
   maintenant lever une exception Error au lieu d'une 
   erreur fatale.
  
  
   Dans l'extension XML-RPC, une référence circulaire lors de la sérialisation 
   lève maintenant une instance d'exception Error au lieu 
   de se traduire par une erreur fatale.
  
  
   Dans l'extension Zip, la méthode ZipArchive::addGlob() 
   lève maintenant une exception Error au lieu de se 
   traduire par une erreur fatale si la prise en charge de glob n'est pas disponible.
  
  
 
  Les variables liées lexiquement ne peuvent pas réutiliser les noms
  
   Les variables liées à une fonction anonyme
    via la construction use ne peuvent pas utiliser le 
   même nom que n'importe quelle superglobals, $this ou 
   n'importe quel paramètre. Par exemple, toutes ces définitions de fonction 
   entraîneront une erreur fatale :
   
  
  
 
  long2ip() changement de type de paramètre
  
   long2ip() attend maintenant un int à la place 
   de string.
  
  
 
  Encodage et décodage JSON
  
   Le paramètre INI serialize_precision contrôle maintenant 
   la précision de sérialisation lors de l'encodage des floats.
  
  
   Le décodage d'une clé vide entraîne désormais un nom de propriété vide, plutôt 
   que _empty_ comme nom de propriété.
   
  
  
   Lorsque vous fournissez l'indicateur JSON_UNESCAPED_UNICODE 
   à json_encode(), les séquences U+2028 et U+2029 sont 
   maintenant échappées.
  
  
 
  
   Modifications de la sémantique des paramètres de mb_ereg() 
   et mb_eregi()
  
  
   Le troisième paramètre des fonctions mb_ereg() et 
   mb_eregi() (regs) est désormais 
   défini sur un tableau vide si rien n'a été mis en correspondance. Auparavant, 
   le paramètre n'aurait pas été modifié.
  
  
 
  Abandon des flux sslv2
  
   Le flux SSLv2 a maintenant été abandonné dans OpenSSL.
  
  
 
  Interdit "return;" pour les retours typés lors de la compilation
  
   Une déclaration de retour sans arguments dans les fonctions qui déclarent un
   type de retour émet désormais E_COMPILE_ERROR (sauf si
   le type de retour est déclaré comme void), même si la
   déclaration de retour ne serait jamais atteinte.