Nicht abwärtskompatible Änderungen
 
  PHP-Kern
  
   Zugriff auf Nicht-Arrays im Array-Stil
   
    Der Versuch, Werte vom Typ null, bool,
    int, float oder resource wie ein
    Array zu verwenden, (z. B. $null["key"]) erzeugt nun
    einen Hinweis.
   
   
  
  
   Das Schlüsselwort fn
   
    fn ist nun ein reserviertes Schlüsselwort. Insbesondere
    kann es nicht mehr als Funktions- oder Klassenname verwendet werden.
    Es kann weiterhin als Name einer Methode oder Klassenkonstante verwendet
    werden.
   
   
  
   <?php-Tag am Ende der Datei
   
    Das Tag <?php am Ende der Datei (ohne nachgestellten
    Zeilenumbruch) wird nun als ein öffnendes PHP-Tag interpretiert. Zuvor
    wurde es entweder als kurzes öffnendes Tag gefolgt vom Literal
    php interpretiert und führte zu einem Syntaxfehler (bei
    short_open_tag=1) oder es wurde als literale
    Zeichenkette <?php interpretiert (bei
    short_open_tag=0).
   
   
  
  
   Serialisierung
   
    Das Serialisierungsformat o wurde entfernt. Da es von
    PHP nie erzeugt wurde, kann dies nur die Deserialisierung von manuell
    erstellten Zeichenketten beeinträchtigen.
   
   
  
   Konstanten für den Passwort-Algorithmus
   
    Die Bezeichner der Algorithmen für das Hashing von Passwörtern sind nun
    keine Ganzzahlen mehr, sondern nullbare Zeichenketten.
   
   
   
    Anwendungen, die die Konstanten PASSWORD_DEFAULT, PASSWORD_BCRYPT,
    PASSWORD_ARGON2I und PASSWORD_ARGON2ID korrekt verwenden, werden weiterhin
    korrekt funktionieren.
   
   
  
   
   
    htmlentities() erzeugt nun einen Hinweis (anstelle
    einer Warnung wegen strikter Standards), wenn sie mit einer Kodierung
    verwendet wird, bei der nur die Substitution von Basisentitäten
    unterstützt wird. In diesem Fall entspricht das der Funktion
    htmlspecialchars().
   
   
  
   
   
    fread() und fwrite() geben nun
    false zurück, wenn die Operation fehlgeschlagen ist; zuvor wurde eine
    leere Zeichenkette oder 0 zurückgegeben. EAGAIN/EWOULDBLOCK werden nicht
    als Fehler gewertet.
   
   
    Diese Funktionen geben nun auch bei Fehlern eine Meldung aus, z. B. wenn
    versucht wird, in eine schreibgeschützte Dateiressource zu schreiben.
   
   
  
 
  BCMath mathematische Berechnungen mit beliebiger Genauigkeit
  
   BCMath-Funktionen erzeugen nun eine Warnung, wenn eine nicht wohlgeformte
   Zahl übergeben wird, z. B. "32foo". Der Parameter wird
   wie bisher als Null interpretiert.
  
  
 
  CURL
  
   Der Versuch, eine CURLFile-Klasse zu serialisieren,
   erzeugt nun eine Exception. Zuvor wurde die Exception nur bei der
   Deserialisierung ausgelöst.
  
  
   Die Verwendung von CURLPIPE_HTTP1 ist veraltet und
   wird ab cURL 7.62.0 nicht mehr unterstützt.
  
  
   Bei der Funktion curl_version() ist der Parameter
   $version veraltet. Wenn ein anderer Wert als der
   Standardwert CURLVERSION_NOW übergeben wird, wird eine
   Warnung ausgegeben und der Parameter wird ignoriert.
  
  
 
  Datum und Uhrzeit
  
   Der Aufruf von var_dump() oder ähnlichem mit einer
   Instanz von DateTime oder
   DateTimeImmutable hinterlässt keine verfügbaren
   Eigenschaften des Objekts mehr.
  
  
   Der Vergleich von DateInterval-Objekten (mittels
   ==, < usw.) erzeugt nun eine
   Warnung und gibt immer false zurück. Zuvor wurden alle
   DateInterval-Objekte als gleich angesehen, sofern
   sie keine Eigenschaften hatten.
  
  
 
 
  MySQLi
  
   Die integrierte Serverfunktionalität wurde entfernt. Sie war seit
   mindestens PHP 7.0 fehlerhaft.
  
  
   Die undokumentierte Eigenschaft mysqli::$stat wurde
   zugunsten von mysqli::stat() entfernt.
  
  
 
  OpenSSL
  
   Die Funktion openssl_random_pseudo_bytes() löst nun
   ähnlich wie random_bytes() bei Fehlern eine Exception
   aus. Insbesondere wird ein Error ausgelöst, wenn die
   Anzahl der angeforderten Bytes kleiner oder gleich Null ist, und eine
   Exception wird ausgelöst, wenn nicht genügend
   Zufallsdaten gesammelt werden können. Wenn die Funktion keine Exception
   wirft, ist der Ausgabeparameter $crypto_strong
   garantiert immer true, weshalb eine explizite Überprüfung nicht nötig ist.
  
  
 
  Reguläre Ausdrücke (Perl-kompatibel)
  
   Wenn der Modus PREG_UNMATCHED_AS_NULL verwendet wird,
   werden nicht gefundene Teilsuchmuster nun auch auf null gesetzt (oder
   [null, -1], wenn die Erfassung des Offsets aktiviert
   ist). Das bedeutet, dass die Größe der $matches
   (Übereinstimmungen) immer gleich ist.
  
  
 
  PHP-Datenobjekte (PDO)
  
   Der Versuch, eine Instanz von PDO oder
   PDOStatement zu serialisieren, erzeugt nun eine
   Exception anstelle einer
   PDOException, was dem Verhalten anderer interner
   Klassen entspricht, die keine Serialisierung unterstützen.
  
  
 
  Reflection
  
   Reflection-Objekte erzeugen nun eine Exception, wenn versucht wird, sie zu
   serialisieren. Die Serialisierung von Reflection-Objekten wurde nie
   unterstützt und führte zu beschädigten Reflection-Objekten. Sie ist nun
   ausdrücklich verboten.
  
  
   Die Werte der Klassenkonstanten von
   ReflectionClassConstant,
   ReflectionMethod und
   ReflectionProperty haben sich geändert.
  
  
 
  Standard-PHP-Bibliothek (SPL)
  
   Wenn die Funktion get_object_vars() für eine Instanz von
   ArrayObject aufgerufen wird, gibt sie nun immer die
   Eigenschaften der Klasse ArrayObject selbst (oder
   einer Unterklasse) zurück. Zuvor wurden die Werte des betreffenden
   Arrays/Objekts zurückgegeben, es sei denn, das Flag
   ArrayObject::STD_PROP_LIST wurde angegeben.
  
  
   Andere betroffene Operationen sind:
  
  
   - 
    
     Die Methode ReflectionObject::getProperties()
    
   
- 
    
     Die Funktionen reset(), current()
     usw. Stattdessen sollten die Methoden von
     Iterator verwendet werden.
    
   
- 
    
     Möglicherweise andere, die Objekteigenschaften als Liste bearbeiten, z. B.
     die Funktion array_walk().
    
   
   Typumwandlungen mit (array) sind davon nicht betroffen.
   Sie geben weiterhin entweder das betreffende Array oder die Eigenschaften
   der Klasse ArrayObject zurück, je nachdem ob das
   Flag ArrayObject::STD_PROP_LIST verwendet wird.
  
  
   Die Methode SplPriorityQueue::setExtractFlags() löst
   eine Exception aus, wenn Null (0) übergeben wird. Zuvor
   erzeugte dies bei der nächsten Extraktionsoperation einen behebbaren
   schwerwiegenden Fehler.
  
  
   Die Klassen ArrayObject,
   ArrayIterator,
   SplDoublyLinkedList und
   SplObjectStorage unterstützen nun zusätzlich zur
   Schnittstelle Serializable das Verfahren
   __serialize() und __unserialize().
   Das bedeutet, dass die mit älteren PHP-Versionen serialisierten Daten immer
   noch deserialisiert werden können, aber Daten, die mit PHP 7.4 erstellt
   wurden, von älteren Versionen nicht verstanden werden.
  
  
 
  Tokenizer
  
   Die Funktion token_get_all() gibt für unerwartete
   Zeichen nun ein T_BAD_CHARACTER-Token aus, anstatt
   Löcher im Token-Stream zu hinterlassen.
  
  
 
  Eingehende Cookies
  
   Seit PHP 7.4.11 werden die Namen der eingehenden
   Cookies aus Sicherheitsgründen nicht mehr URL-dekodiert.