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.

Die Funktion get_declared_classes()

get_declared_classes() gibt keine anonymen Klassen mehr zurück, die noch nicht instanziiert wurden.

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).

Stream-Wrapper

Wenn include/require für einen Stream verwendet wird, wird streamWrapper::stream_set_option() mit der Option STREAM_OPTION_READ_BUFFER aufgerufen. Bei einem benutzerdefinierten Stream-Wrapper kann es notwendig sein, die Methode streamWrapper::stream_set_option() zu implementieren, um eine Warnung zu vermeiden (eine Implementierung, die immer false zurückgibt, ist normalerweise ausreichend).

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.

  • PASSWORD_DEFAULT war int 1 und ist nun '2y' (in PHP 7.4.0, 7.4.1 und 7.4.2 war es null)
  • PASSWORD_BCRYPT war int 1 und ist nun '2y'
  • PASSWORD_ARGON2I war int 2 und ist nun 'argon2i'
  • PASSWORD_ARGON2ID war int 3 und ist nun 'argon2id'

Anwendungen, die die Konstanten PASSWORD_DEFAULT, PASSWORD_BCRYPT, PASSWORD_ARGON2I und PASSWORD_ARGON2ID korrekt verwenden, werden weiterhin korrekt funktionieren.

Die Funktion htmlentities()

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().

Die Funktionen fread() und fwrite()

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.

Intl

Bei den Funktionen idn_to_ascii() und idn_to_utf8() ist der Standardwert des Parameters nun INTL_IDNA_VARIANT_UTS46 anstelle des veralteten INTL_IDNA_VARIANT_2003.

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 nicht auslöst, ist der Parameter $crypto_strong output 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.

Hier Kannst Du einen Kommentar verfassen


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

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

Definition von Stored Procedures - eine Einführung

Stored Procedures sind vordefinierte SQL-Codeblöcke, die in einer Datenbank gespeichert sind und bei Bedarf aufgerufen werden können. ...

Bernie

Autor : ebiz-consult GmbH & Co. KG
Kategorie: mySQL-Tutorials

Wie kann man komplexe Abfragen mit SQL-Querys In MySQLi effektiv durchführen?

In diesem MySQL-Tutorial wird erklärt, wie komplexe SQL-Abfragen in MySQLi effizient durchgeführt werden können. Wir werden uns mit verschiedenen Aspekten der Datenbankabfrage beschäftigen und spezifische Methoden kennenlernen. ...

TheMax

Autor : TheMax
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

Berechnungen durchführen

Hallo liebe Forenmitglieder, meine erste frage ist zum Aufbau meiner kleinen Berechnungswebseite, nichts kommerzielles, soll nur eine Anwendung f ...

Geschrieben von matze511 am 21.04.2024 21:42:37
Forum: PHP Developer Forum
Professioneller Webentwickler & Webdesigner

Of course, here is the translation: Hello, Thank you for your interest in the long-term project. Your extensive skills and experience in web dev ...

Geschrieben von Athelstan am 15.04.2024 09:25:39
Forum: Jobgesuche
Wir stellen unsere SEO-Agentur vor

Hallo In der heutigen digitalen Welt war es für Unternehmen noch nie so einfach, ihre Reichweite weltweit zu vergrößern. Wenn Sie außerhalb I ...

Geschrieben von thomasmuller am 14.04.2024 07:18:33
Forum: User stellen sich vor
Spielplan für 4 Gruppen zu je 6 Teams auf 2 Feldern

Hallöchen zusammen, ich versuche derzeit unseren Excel-Spielplan in PHP zu überführen. Eigentlich bin ich auch shon fertig - wenn da nicht dies ...

Geschrieben von derH0st am 11.04.2024 15:58:37
Forum: PHP Developer Forum