Nicht abwärtskompatible Änderungen

PHP Core

Zugriffsbeschränkungen für $GLOBALS

Der Zugriff auf das Array $GLOBALS unterliegt nun einer einer Reihe von Einschränkungen. Der Lese- und Schreibzugriff auf einzelne Array-Elemente wie $GLOBALS['var'] funktioniert weiterhin wie bisher. Der nur lesende Zugriff auf das Gesamt-Array $GLOBALS wird ebenfalls wird weiterhin unterstützt. Allerdings wird der Schreibzugriff auf das Gesamt-Array $GLOBALS nicht mehr unterstützt. Zum Beispiel wird array_pop($GLOBALS) zu einem Fehler führen.

Verwendung von static-Variablen in geerbten Methoden

Wenn eine Methode, die statische Variablen verwendet, geerbt (aber nicht überschrieben) wird, teilt die geerbte Methode nun die statischen Variablen mit der Methode der Elternklasse.

<?php
class {
    public static function 
counter() {
        static 
$counter 0;
        
$counter++;
        return 
$counter;
    }
}
class 
extends {}
var_dump(A::counter()); // int(1)
var_dump(A::counter()); // int(2)
var_dump(B::counter()); // int(3), vorher int(1)
var_dump(B::counter()); // int(4), vorher int(2)
?>
Das bedeutet, dass sich statische Variablen in Methoden nun genauso verhalten wie statische Eigenschaften.

Angabe optionaler Parameter vor den erforderlichen

Ein optionaler Parameter, der vor den erforderlichen Parametern angegeben wird, wird nun immer als erforderlich angesehen. Dies ist auch der Fall, wenn eine Funktion mit benannten Parametern aufgerufen wird. Seit PHP 8.0.0, aber vor PHP 8.1.0, löst das untenstehende Beispiel einen Hinweis darauf aus, dass die Definition veraltet ist, läuft aber beim Aufruf trotzdem fehlerfrei. Ab PHP 8.1.0 wird ein Fehler der Klasse ArgumentCountError ausgelöst, so wie es auch bei einem Aufruf mit positionsbezogenen Parametern der Fall wäre.

<?php
function makeyogurt($container "bowl"$flavour)
{
    return 
"Making a $container of $flavour yogurt.\n";
}
try
{
    echo 
makeyogurt(flavour"raspberry");
}
catch (
Error $e)
{
    echo 
get_class($e), ' - '$e->getMessage(), "\n";
}
?>

Das oben gezeigte Beispiel erzeugt mit PHP 8.0 folgende Ausgabe:

Deprecated: Required parameter $flavour follows optional parameter $container
 in example.php on line 3
Making a bowl of raspberry yogurt.

Das oben gezeigte Beispiel erzeugt mit PHP 8.1 folgende Ausgabe:

Deprecated: Optional parameter $container declared before required parameter
 $flavour is implicitly treated as a required parameter in example.php on line 3
ArgumentCountError - makeyogurt(): Argument #1 ($container) not passed

Es ist zu beachten, dass ein Standardwert von null vor erforderlichen Parametern verwendet werden kann, um einen nullbaren Typ anzugeben, aber der Parameter wird trotzdem benötigt.

Kompatibilität des Rückgabetyps mit internen Klassen

Die meisten nicht-finalen internen Methoden erfordern nun, dass überschreibende Methoden einen kompatiblen Rückgabetyp deklarieren, andernfalls wird bei der Vererbungsüberprüfung ein Hinweis darauf ausgegeben, dass die Funktionsweise veraltet ist. Falls der Rückgabetyp aufgrund von Kompatibilitätsproblemen zwischen PHP-Versionen für eine überschreibende Methode nicht deklariert werden kann, kann das Attribut #[ReturnTypeWillChange] hinzugefügt werden, um den Hinweis auf die veraltete Variante zu unterdrücken.

Neue Schlüsselwörter

readonly ist nun ein Schlüsselwort. Es kann jedoch weiterhin als Name einer Funktion verwendet werden.

never ist nun ein reserviertes Wort, sodass es nicht verwendet werden kann, um eine Klasse, eine Schnittstelle oder einen Trait zu benennen, und es darf auch nicht in Namespaces verwendet werden.

Umstellung von Ressourcen auf Objekte

Mehrere Ressourcen wurden zu Objekten migriert. Rückgabewertprüfungen mit is_resource() sollten durch Prüfungen auf false ersetzt werden.

MySQLi

mysqli_fetch_fields() und mysqli_fetch_field_direct() geben nun bei der Eigenschaft max_length immer 0 zurück. Dieser Wert kann berechnet werden, indem die Ergebnismenge in einer Schleife durchlaufen und die maximale Länge ermittlt wird. Dies ist der Algorithmus, den PHP zuvor intern verwendet hat.

Die Option MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH hat keine Auswirkung mehr.

Die Option MYSQLI_STORE_RESULT_COPY_DATA hat keine Auswirkung mehr. Die Übergabe eines beliebigen Wertes an den mode-Parameter von mysqli::store_result() hat keine Auswirkung mehr.

mysqli::connect() gibt bei Erfolg nun true anstelle von null zurück.

Der Standard-Fehlerbehandlungsmodus wurde von "silent" auf "exceptions" geändert. Siehe die Seite MySQLi-Berichtsmodus für weitere Details darüber, was das bedeutet, und wie man dieses Attribut explizit setzt. Um das vorherige Verhalten wiederherzustellen, kann folgendes verwendet werden: mysqli_report(MYSQLI_REPORT_OFF);

Klassen, die mysqli_stmt::execute() erweitern, müssen nun den zusätzlichen optionalen Parameter angeben.

MySQLnd

Die INI-Direktive mysqlnd.fetch_data_copy wurde entfernt. Dies sollte zu keinen für den Benutzer sichtbaren Verhaltensänderungen führen.

OpenSSL

Private EC-Schlüssel werden jetzt wie alle anderen Schlüssel im PKCS#8-Format statt im traditionellen Format exportiert.

openssl_pkcs7_encrypt() und openssl_cms_encrypt() verwenden nun standardmäßig AES-128-CBC anstelle von RC2-40. Die RC2-40-Chiffre gilt als unsicher und wird von OpenSSL 3 standardmäßig nicht aktiviert.

PHP-Datenobjekte

PDO::ATTR_STRINGIFY_FETCHES wandelt nun Werte vom Typ Boolean in "0" oder "1" um. Zuvor wurden Booleans nicht stringifiziert.

Wenn PDO::ATTR_STRINGIFY_FETCHES nicht aktiviert ist, Bindet der Aufruf von PDOStatement::bindColumn() mit PDO::PARAM_LOB das Ergebnis eines Streams nun dauerhaft ein. Zuvor war das Ergebnis entweder ein Stream oder eine Zeichenkette, je nach verwendetem Datenbanktreiber und dem Zeitpunkt der Bindung.

MySQL-Treiber

Integer- und Float-Werte in Ergebnismengen werden nun als native PHP-Typen anstelle von Strings zurückgegeben, wenn emulierte vorbereitete Anweisungen verwendet werden. Dies entspricht dem Verhalten von nativen vorbereiteten Anweisungen. Das vorherige Verhalten kann wiederhergestellt werden, indem die Option PDO::ATTR_STRINGIFY_FETCHES aktiviert wird.

SQLite-Treiber

Integer- und Float-Werte in Ergebnismengen werden nun als native PHP-Typen zurückgegeben. Das vorherige Verhalten kann wiederhergestellt werden, indem die Option PDO::ATTR_STRINGIFY_FETCHES aktiviert wird.

Phar

Um der ArrayAccess-Schnittstelle zu entsprechen, geben Phar::offsetUnset() und PharData::offsetUnset() keinen Boolean-Wert mehr zurück.

Standardfunktionen

version_compare() akzeptiert keine undokumentierten Operator-Abkürzungen mehr.

htmlspecialchars(), htmlentities(), htmlspecialchars_decode(), html_entity_decode() und get_html_translation_table() verwenden nun standardmäßig ENT_QUOTES | ENT_SUBSTITUTE anstelle von ENT_COMPAT. Das bedeutet, dass ' zu &#039; umgewandelt wird, während vorher nichts geändert wurde. Darüber hinaus werden fehlerhafte UTF-8-Zeichen durch ein Unicode-Ersatzzeichen ersetzt und nicht mehr durch eine leere Zeichenkette.

debug_zval_dump() gibt nun nicht nur den eigenen Referenzzähler aus, sondern auch den Referenzzähler des Referenz-Wrappers, anstatt dem Wert ein & voranzustellen. Dies ist ein genaueres Modell der Referenzdarstellung seit PHP 7.0.

debug_zval_dump() gibt für festgelegte Zeichenketten und unveränderliche Arrays nun interned aus.

Standard-PHP-Bibliothek (SPL)

SplFixedArray wird nun wie ein Array in JSON kodiert.

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe
Es sind noch keine Kommentare vorhanden.

PHP cURL-Tutorial: Verwendung von cURL zum Durchführen von HTTP-Anfragen

cURL ist eine leistungsstarke PHP-Erweiterung, die es Ihnen ermöglicht, mit verschiedenen Servern über verschiedene Protokolle wie HTTP, HTTPS, FTP und mehr zu kommunizieren. ...

TheMax

Autor : TheMax
Kategorie: PHP-Tutorials

Midjourney Tutorial - Anleitung für Anfänger

Über Midjourney, dem Tool zur Erstellung digitaler Bilder mithilfe von künstlicher Intelligenz, gibt es ein informatives Video mit dem Titel "Midjourney Tutorial auf Deutsch - Anleitung für Anfänger" ...

Mike94

Autor : Mike94
Kategorie: KI Tutorials

Grundlagen von Views in MySQL

Views in einer MySQL-Datenbank bieten die Möglichkeit, eine virtuelle Tabelle basierend auf dem Ergebnis einer SQL-Abfrage zu erstellen. ...

admin

Autor : admin
Kategorie: mySQL-Tutorials

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen

Schwarzes Brett/ News Script

Thanks for the best post with these amazing ideas, and it is good for us to find more updates that bring us the right results. You can click here ...

Geschrieben von Yagil am 02.11.2024 19:12:36
Forum: PHP Developer Forum
Spielgeschenk für Freund zu finden

Ist es ein Geschenk, das in 4 Jahren sicher gefunden wird, oder brauchen wir Hilfe? )))))))) Ich habe übrigens einmal ein originelles Geschenk be ...

Geschrieben von benisfroms am 31.10.2024 20:21:11
Forum: Off-Topic Diskussionen
Mongo Datenbank und Tabellendaten in sehr großer Menge...Wer kennt sich aus?

Es hört sich so an, als stünden Sie vor einer großen Herausforderung beim Importieren und Verarbeiten einer großen Anzahl von JSON-Dateien in ...

Geschrieben von ColeHarry am 29.10.2024 04:17:30
Forum: PHP Developer Forum
Kalenderwoche auf Sonntag anfangen lassen

Um die neue Woche bereits am Sonntag starten zu lassen, können wir den Code so anpassen, dass er prüft, ob heute Sonntag ist. Falls ja, zählt d ...

Geschrieben von magentaviking am 28.10.2024 10:04:54
Forum: PHP Developer Forum