Veraltete Features
PHP-Kern
-
Wenn nach einem Parameter mit einem Standardwert ein benötigter folgt, hat der Standardwert keinen Effekt. Mit PHP 8.0.0 ist das veraltet und kann durch das Entfernen des Standardwertes behoben werden, ohne dass Funktionalität verloren geht:
<?php
function test($a = [], $b) {} // Vorher
function test($a, $b) {} // Danach
?>Eine Ausnahme der Regel stellen Parameter dar, welche der Form
Typ $param = null
entsprechen, bei welcher die Vorgabe null den Typ implizit nullbar macht. Diese Funktionalität bleibt erhalten, es wird jedoch empfohlen, den Typ explizit nullbar zu machen:<?php
function test(A $a = null, $b) {} // Noch erlaubt
function test(?A $a, $b) {} // Empfohlen
?> -
Das Aufrufen von get_defined_functions() mit
exclude_disabled
explizit auffalse
gesetzt, ist veraltet und hat keine Wirkung mehr. get_defined_functions() erlaubt keine deaktivierten Funktionen mehr.
Enchant
-
enchant_broker_set_dict_path() und enchant_broker_get_dict_path() sind veraltet, da diese Funktionalität in libenchant < 1.5 und libenchant-2 nicht mehr vorhanden ist.
-
enchant_dict_add_to_personal() ist veraltet. enchant_dict_add() ersetzt diese Funktion.
-
enchant_dict_is_in_session() ist veraltet. enchant_dict_is_added() ersetzt diese Funktion.
-
enchant_broker_free() und enchant_broker_free_dict() sind ebenfalls veraltet. Das Objekt kann stattdessen mit unset() gelöscht werden.
-
Die Konstanten
ENCHANT_MYSPELL
undENCHANT_ISPELL
sind veraltet.
LibXML
libxml_disable_entity_loader() ist veraltet. Da nun
jedoch libxml 2.9.0 vorausgesetzt wird, ist das externe Laden von Entitäten
garantiert standardmäßig deaktiviert, und diese Funktion wird nicht mehr
benötigt, um vor XXE-Angriffen zu schützen, es sei denn, das (immer noch
angreifbare) LIBXML_NOENT
wird verwendet. In diesem
Fall ist es empfehlenswert, den Code unter Verwendung von
libxml_set_external_entity_loader() zu überarbeiten, um
das Laden externer Entitäten zu unterdrücken.
PGSQL / PDO PGSQL
-
Die Konstante
PGSQL_LIBPQ_VERSION_STR
nimmt nun den selben Wert an wiePGSQL_LIBPQ_VERSION
und ist daher veraltet. -
Die Funktions-Aliase in der pgsql-Erweiterung sind veraltet. Die folgende Liste zeigt, welche Funktionen stattdessen verwendet werden sollen.
- pg_errormessage() → pg_last_error()
- pg_numrows() → pg_num_rows()
- pg_numfields() → pg_num_fields()
- pg_cmdtuples() → pg_affected_rows()
- pg_fieldname() → pg_field_name()
- pg_fieldsize() → pg_field_size()
- pg_fieldtype() → pg_field_type()
- pg_fieldnum() → pg_field_num()
- pg_result() → pg_fetch_result()
- pg_fieldprtlen() → pg_field_prtlen()
- pg_fieldisnull() → pg_field_is_null()
- pg_freeresult() → pg_free_result()
- pg_getlastoid() → pg_last_oid()
- pg_locreate() → pg_lo_create()
- pg_lounlink() → pg_lo_unlink()
- pg_loopen() → pg_lo_open()
- pg_loclose() → pg_lo_close()
- pg_loread() → pg_lo_read()
- pg_lowrite() → pg_lo_write()
- pg_loreadall() → pg_lo_read_all()
- pg_loimport() → pg_lo_import()
- pg_loexport() → pg_lo_export()
- pg_setclientencoding() → pg_set_client_encoding()
- pg_clientencoding() -> pg_client_encoding()
Standard Library
-
Sortierend vergleichende Funktionen welche
true
oderfalse
zurückgeben, werden nun eine deprecation-Warnung zurückgeben und sollten durch eine Implementation ersetzt werden, welche einen Integer zurückgibt, der kleiner, gleich oder größer als 0 ist.<?php
// Replace
usort($array, fn($a, $b) => $a > $b);
// With
usort($array, fn($a, $b) => $a <=> $b);
?>
Zip
-
Die Verwendung einer leeren Datei als ZipArchive ist veraltet. Libzip 1.6.0 akzeptiert keine leeren Dateien als ZIP-Archive mehr. Der existierende Workaround wird in der nächsten Version entfernt.
-
Die prozedurale API von Zip ist veraltet. Als Ersatz kann ZipArchive genutzt werden. Die Iteration über alle Entitäten kann durch den Einsatz von ZipArchive::statIndex() und einer for-Schleife erreicht werden:
<?php
// Iteration mit der prozedualen API
assert(is_resource($zip));
while ($entry = zip_read($zip)) {
echo zip_entry_name($entry);
}
// Iteration mit der Objekorientierten API
assert($zip instanceof ZipArchive);
for ($i = 0; $entry = $zip->statIndex($i); $i++) {
echo $entry['name'];
}
?>
Reflection
-
ReflectionFunction::isDisabled() ist veraltet, da es nicht mehr möglich ist, eine ReflectionFunction für eine deaktivierte Funktion zu erstellen. Die Methode gibt nun immer
false
zurück. -
ReflectionParameter::getClass(), ReflectionParameter::isArray(), und ReflectionParameter::isCallable() sind veraltet. ReflectionParameter::getType() und die ReflectionType-APIs sollten stattdessen genutzt werden.