Veraltete Features
PHP-Kern
Implementierung von Serializable ohne __serialize() und __unserialize()
Sofern keine Unterstützung für PHP-Versionen vor 7.4 erforderlich ist, sollten nur diese beiden magischen Methoden implementiert werden, andernfalls sollten sowohl Schnittstellenmethoden als auch magische Methoden implementiert werden.
Übergabe von null
an den Parameter einer eingebauten Funktion, der null
nicht erlaubt
Es wird empfohlen, null
nicht mehr an skalare Parameter von eingebauten
Funktionen zu übergeben. Andernfalls wird nun ein entsprechender Hinweis
ausgegeben. Dieses Verhalten wurde eingeführt, um es an die Funktionsweise
von benutzerdefinierten Funktionen anzugleichen, bei denen
null
-validierende Parameter zu diesem Zweck explizit markiert werden
müssen.
<?php
var_dump(str_contains("foobar", null));
// Veraltet: Die Übergabe von null an Parameter #2 ($needle) vom Typ
// string ist veraltet
?>
Implizite Umwandlungen von Float in Integer, die nicht kompatibel sind
Die implizite Umwandlung von Float in Integer, die zu einem Verlust an Genauigkeit führt, ist nun veraltet. Dies betrifft Array-Schlüssel, erzwungene Konvertierungen von Integer-Typen, und Operatoren, die mit Integern arbeiten.
<?php
$a = [];
$a[15.5]; // veraltet, da der Schlüsselwert die 0.5-Komponente verliert
$a[15.0]; // OK, weil 15.0 == 15
?>
Aufruf eines static-Elements bei einem Trait
Der Aufruf einer static-Methode oder der Zugriff auf eine static-Eigenschaft direkt in einem Trait ist veraltet. Auf statische Methoden und Eigenschaften sollte nur in einer Klasse zugegriffen werden, die den Trait verwendet.
Rückgabe eines nicht-Arrays von __sleep()
Die Rückgabe eines Wertes von __sleep(), der kein Array ist, erzeugt nun eine Fehlermeldung.
Rückgabe per Referenz aus einer void-Funktion
<?php
function &test(): void {}
?>
E_NOTICE
-Meldung aus, wenn sie aufgerufen wird:
Only variable references should be returned by reference
.
Automatische Erstellung (Autovivifikation) von false
Autovivifikation ist der Prozess der automatischen Erstellung eines
Arrays, wenn ein Wert hinzugefügt wird. Dies ist bei skalaren Werten
verboten, jedoch war false
eine Ausnahme. Diese Ausnahme ist nun
veraltet.
<?php
$arr = false;
$arr[] = 2; // veraltet
?>
Hinweis:
Die Autovivifikation von
null
und undefinierten Werten ist weiterhin erlaubt:<?php
// Von undefiniert
$arr[] = 'ein Wert';
$arr['existiertNicht'][] = 2;
// Von null
$arr = null;
$arr[] = 2;
?>
ctype
Überprüfung von Parametern, die keine Strings sind
Die Übergabe eines Parameters, der kein String ist, ist veraltet. In
Zukunft wird der Parameter als String interpretiert und nicht mehr als
ASCII-Codepunkt. Je nach beabsichtigtem Verhalten sollte der Parameter
entweder nach String umgewandelt werden oder ein expliziter Aufruf von
chr() erfolgen.
Alle ctype_*()
-Funktionen sind betroffen.
Date
Die Funktionen date_sunrise() und date_sunset() sind zugunsten von date_sun_info() veraltet.
Die Funktion strptime() ist veraltet. Stattdessen sollte date_parse_from_format() verwendet werden (für Locale-unabhängiges Parsen), oder IntlDateFormatter::parse() (für Locale-abhängiges Parsen).
Die Funktionen strftime() und gmstrftime() sind veraltet. Stattdessen sollte date() verwendet werden (für Locale-unabhängige Formatierung), oder IntlDateFormatter::format() (für Locale-abhängige Formatierung).
Filter
Die Filter FILTER_SANITIZE_STRING
und
FILTER_SANITIZE_STRIPPED
sind veraltet.
Die INI-Direktive filter.default ist veraltet.
GD
Der Parameter num_points
der Funktionen
imagepolygon(),
imageopenpolygon() und
imagefilledpolygon() ist veraltet.
Hash
Die Funktionen mhash(),
mhash_keygen_s2k(), mhash_count(),
mhash_get_block_size() und
mhash_get_hash_name() sind veraltet. Stattdessen sollten
die hash_*()
-Funktionen verwendet werden.
IMAP
Die Konstante NIL
ist veraltet.
Stattdessen sollte 0
verwendet werden.
Intl
Der Aufruf von IntlCalendar::roll() mit einem
Boolean-Parameter ist veraltet. Anstelle von true
und false
sollten
1
bzw. -1
verwendet werden.
Multibyte-String
Der Aufruf von mb_check_encoding() ohne Parameter ist veraltet.
MySQLi
Die Eigenschaft mysqli_driver::$driver_version ist
veraltet. Sie war bedeutungslos und überholt; stattdessen sollte
PHP_VERSION_ID
verwendet werden.
Der Aufruf von mysqli::get_client_info() oder
mysqli_get_client_info() mit dem Parameter
mysqli
ist veraltet. Um die Versionsinformationen
der Clientbibliothek zu erhalten, sollte
mysqli_get_client_info() ohne Parameter aufgerufen
werden.
Die Methode mysqli::init() ist veraltet. Der Aufruf von parent::init() sollte durch parent::__construct() ersetzt werden.
OCI8
Die INI-Direktive oci8.old_oci_close_semantics ist veraltet.
ODBC
odbc_result_all() ist veraltet.
PDO
Der Abrufmodus PDO::FETCH_SERIALIZE
ist veraltet.
PgSQL
Den pgsql_*()
-Funktionen muss der Verbindungsparameter
nun explizit übergeben werden.
SOAP
Die ssl_method
-Option von
SoapClient::__construct() ist zugunsten der
SSL-Streamkontext-Optionen veraltet.
Standard
Der Aufruf von key(), current(), next(), prev(), reset() oder end() bei Objekten ist veraltet. Stattdessen sollte entweder zuerst get_mangled_object_vars() auf das Objekt angewendet werden oder es sollte ArrayIterator verwendet werden.
Die INI-Direktive
auto_detect_line_endings
ist veraltet. Falls nötig, sollten "\r"
-Zeilenumbrüche
stattdessen manuell bearbeitet werden.
Die Konstanten FILE_BINARY
und
FILE_TEXT
sind veraltet. Sie hatten nie eine
Auswirkung.