Veraltete Features
PHP-Kern
Verschachtelte ternäre Operatoren ohne explizite Klammern
Verschachtelte ternäre Operationen müssen nun explizit Klammern verwenden, um die Reihenfolge der Operationen festzulegen. Wenn in der Vergangenheit keine Klammern verwendet wurden, führte die Links-Assoziativität in den meisten Fällen nicht zum erwarteten Verhalten.
<?php
1 ? 2 : 3 ? 4 : 5; // veraltet
(1 ? 2 : 3) ? 4 : 5; // OK
1 ? 2 : (3 ? 4 : 5); // OK
?>
Klammern sind nicht erforderlich, wenn der mittlere Operand umschlossen wird, da dies immer eindeutig ist und nicht durch die Assoziativität beeinflusst wird:
1 ? 2 ? 3 : 4 : 5 // OK
Zugriff auf Array- und Zeichenketten-Offset mit geschweiften Klammern
Die Syntax für den Zugriff auf Array- und String-Offsets mit geschweiften
Klammern ist veraltet. Statt $var{$idx}
sollte
$var[$idx]
verwendet werden.
Die Typumwandlung (real) und die Funktion is_real()
Die Typumwandlung (real)
ist veraltet, stattdessen
(float)
verwendet werden.
Die Funktion is_real() ist ebenfalls veraltet, stattdessen sollte is_float() verwendet werden.
Aufhebung der Bindung von $this
, wenn $this
verwendet wird
Die Bindung von $this
an eine nicht-statische Closure
aufzuheben, die $this
verwendet, ist veraltet.
Schlüsselwort parent
ohne übergeordnete Klasse
Die Verwendung von parent
innerhalb einer Klasse ohne
Elternklasse ist veraltet und wird in Zukunft einen Fehler bei der
Kompilierung auslösen. Derzeit wird ein Fehler nur dann erzeugt, wenn zur
Laufzeit auf die Elternklasse zugegriffen wird.
INI-Option allow_url_include
Die INI-Direktive allow_url_include ist veraltet. Wenn sie aktiviert ist, wird beim Start ein entsprechender Hinweis erzeugt.
Ungültige Zeichen in Funktionen zur Umwandlung der Basis
Die Übergabe unzulässiger Zeichen an die Funktionen base_convert(), bindec(), octdec() und hexdec() führt nun zu einem Hinweis auf eine veraltete Verwendung. Das Ergebnis wird so berechnet, als gäbe es das unzulässige Zeichen nicht. Führende und nachfolgende Leerzeichen sowie Präfixe wie 0x (je nach Zahlensystem) sind weiterhin zulässig.
Die Anwendung von array_key_exists() auf Objekte
Die Anwendung der Funktion array_key_exists() auf Objekte ist veraltet. Stattdessen sollte entweder isset() oder property_exists() verwendet werden.
Funktionen für "magische Anführungszeichen" (Magic Quotes)
Die Funktionen get_magic_quotes_gpc() und
get_magic_quotes_runtime() sind veraltet. Sie geben
immer false
zurück.
Die Funktion hebrevc()
Die Funktion hebrevc() ist veraltet. Sie kann durch
nl2br(hebrev($str))
ersetzt werden oder, besser, indem
die Unterstützung von Unicode-RTL genutzt wird.
Die Funktion convert_cyr_string()
Die Funktion convert_cyr_string() ist veraltet. Sie kann durch mb_convert_string(), iconv() oder UConverter ersetzt werden.
Die Funktion money_format()
Die Funktion money_format() ist veraltet. Sie kann durch die Funktionalität der intl-Klasse NumberFormatter ersetzt werden.
Die Funktion ezmlm_hash()
Die Funktion ezmlm_hash() ist veraltet.
Die Funktion restore_include_path()
Die Funktion restore_include_path() ist veraltet. Sie
kann durch ini_restore('include_path')
ersetzt werden.
COM
Der Import von Typbibliotheken, bei denen die Groß- und Kleinschreibung von Konstanten nicht beachtet wird, ist veraltet.
Filter
Der Filter FILTER_SANITIZE_MAGIC_QUOTES
ist veraltet,
stattdessen sollte FILTER_SANITIZE_ADD_SLASHES
verwendet werden.
Multibyte-Zeichenketten
Bei der Funktion mb_ereg_replace() ist die Übergabe eines Musters, das keine Zeichenkette ist, veraltet. Gegenwärtig werden solche Muster als ASCII-Codepunkte interpretiert. In PHP 8 wird das Muster stattdessen als Zeichenkette interpretiert.
Bei der Funktion mb_strrpos() ist die Übergabe der Kodierung als 3. Parameter veraltet. Stattdessen sollten ein 0-Offset und die Kodierung als 4. Parameter übergeben werden.
Lightweight Directory Access Protocol (LDAP)
Die Funktionen ldap_control_paged_result_response() und ldap_control_paged_result() sind veraltet. Steuerelemente für die Seitennavigation können stattdessen zusammen mit ldap_search() gesendet werden.
Reflection
Der Aufruf von ReflectionType::__toString() erzeugt nun einen Hinweis auf eine veraltete Funktion. Diese Methode wird in der Dokumentation seit PHP 7.1 als veraltet zugunsten von ReflectionNamedType::getName() bezeichnet, hat aber aus technischen Gründen keinen entsprechenden Hinweis erzeugt.
Die export()
-Methoden sind in allen Klassen von
Reflection veraltet. Stattdessen sollte ein
Reflection-Objekt erzeugt werden und dieses in eine
Zeichenkette umgewandelt werden:
<?php
// Anstelle von ReflectionClass::export(Foo::class, false):
echo new ReflectionClass(Foo::class), "\n";
// Anstelle von $str = ReflectionClass::export(Foo::class, true):
$str = (string) new ReflectionClass(Foo::class);
?>
Socket
Bei der Funktion socket_addrinfo_lookup() sind die Flags
AI_IDN_ALLOW_UNASSIGNED
und
AI_IDN_USE_STD3_ASCII_RULES
veraltet und entsprechen
damit der zugrundeliegenden Glibc.