Nicht abwärtskompatible Änderungen

PHP-Kern

Interpretation des schließenden Heredoc/Nowdoc-Bezeichners

Durch die Einführung der flexiblen Heredoc/Nowdoc-Syntax können doc-Zeichenketten, die den schließenden Bezeichner in ihrem Körper enthalten, zu Syntaxfehlern oder einer veränderten Interpretation führen. Zum Beispiel in:

<?php
$str 
= <<<FOO
abcdefg
   FOO
FOO;
?>
hatte das eingerückte FOO bisher keine besondere Bedeutung. Nun wird es als Ende der Heredoc-Zeichenkette interpretiert und das folgende FOO; führt zu einem Syntaxfehler. Dieses Problem kann immer gelöst werden, indem ein schließender Bezeichner gewählt wird, der nicht im Inhalt der Zeichenkette vorkommt.

Warnung bei continue in switch-Anweisung

Eine continue-Anweisung, die in einer switch-Kontrollstruktur verwendet wird, erzeugt nun eine Warnung. In PHP sind solche continue-Anweisungen gleichbedeutend mit break, während sie sich in anderen Sprachen wie continue 2 verhalten.

<?php
while ($foo) {
    switch (
$bar) {
      case 
"baz":
         continue;
         
// Warning: "continue" targeting switch is equivalent to
         //          "break". Did you mean to use "continue 2"?
   
}
}
?>

Strikte Interpretation von ganzzahligen Zeichenketten-Schlüsseln bei ArrayAccess

Ein Array-Zugriff vom Typ $obj["123"], worin $obj ArrayAccess implementiert und "123" ein ganzzahliges Literal vom Typ string ist, führt nicht mehr zu einer impliziten Umwandlung in eine Ganzzahl, d. h., anstelle von $obj->offsetGet(123) wird nun $obj->offsetGet("123") aufgerufen. Dies entspricht dem bestehenden Verhalten für nicht-literale Werte. Das Verhalten von Arrays wird davon in keiner Weise beeinflusst; sie wandeln ganzzahlige Zeichenketten-Schlüssel weiterhin implizit in Ganzzahlen um.

Statische Eigenschaften werden nicht mehr durch Referenzzuweisung getrennt

In PHP werden statische Eigenschaften von vererbenden Klassen gemeinsam genutzt, es sei denn, die statische Eigenschaft wird in einer Kindklasse explizit überschrieben. Allerdings war es aufgrund eines Implementierungs-Artefakts möglich, die statischen Eigenschaften durch Zuweisung einer Referenz zu trennen. Dieses Schlupfloch wurde nun behoben.

<?php
class Test {
    public static 
$x 0;
}
class 
Test2 extends Test { }

Test2::$x = &$x;
$x 1;

var_dump(Test::$xTest2::$x);
// Vorher:     int(0), int(1)
// Nun:        int(1), int(1)
?>

Referenzen, die von Array- und Eigenschafts-Zugriffen zurückgegeben werden, werden sofort aufgelöst

Eine Referenz, die von einem Array- oder Eigenschafts-Zugriff zurückgegeben wird, wird nun im Zuge des Zugriffs aufgelöst. Das bedeutet, dass es nicht mehr möglich ist, die Referenz zwischen dem Zugriff und der Verwendung des Wertes, auf den zugegriffen wurde, zu verändern:

<?php
$arr 
= [1];
$ref =& $arr[0];
var_dump($arr[0] + ($arr[0] = 2));
// Vorher: int(4), Nun: int(3)
?>
Dadurch wird das Verhalten von Referenzen und Nicht-Referenzen konsistent. Es ist zu beachten, dass das Lesen und Schreiben eines Wertes innerhalb eines einzelnen Ausdrucks weiterhin undefiniertes Verhalten bleibt und sich in der Zukunft wieder ändern kann.

Entpacken von Parametern bei Traversables mit nicht-ganzzahligen Schlüsseln wird nicht mehr unterstützt

Das Entpacken von Parametern funktioniert bei Traversables mit nicht-ganzzahligen Schlüsseln nicht mehr. Der folgende Code funktionierte in PHP 5.6-7.2 unbeabsichtigt.

<?php
function foo(...$args) {
    
var_dump($args);
}
function 
gen() {
    yield 
1.23 => 123;
}
foo(...gen());
?>

Verschiedenes

Das Hilfsprogramm ext_skel wurde komplett überarbeitet; neue Optionen wurden hinzugefügt und einige alte Optionen entfernt. Es ist nun in PHP geschrieben und hat keine externen Abhängigkeiten.

Die Unterstützung für BeOS wurde eingestellt.

Exceptions, die im Modus EH_THROW durch die automatische Umwandlung von Warnungen in Exceptions ausgelöst werden (z. B. einige DateTime-Exceptions), füllen den Bereich von error_get_last() nicht mehr mit Daten. Damit funktionieren sie nun genauso wie manuell ausgelöste Exceptions.

TypeError meldet nun falsche Typen als int und bool anstelle von integer bzw. boolean.

Undefinierte Variablen, die an compact() übergeben werden, werden nun als Hinweis gemeldet.

Die Funktion getimagesize() und verwandte Funktionen melden nun den Mime-Typ von BMP-Bildern als image/bmp anstelle von image/x-ms-bmp, da ersterer bei der IANA registriert ist (siehe » RFC 7903).

Die Funktion stream_socket_get_name() gibt nun IPv6-Adressen zurück, die in Klammern eingeschlossen sind. Zum Beispiel wird nun "[::1]:1337" anstelle von "::1:1337" zurückgegeben.

BCMath mathematische Berechnungen mit beliebiger Genauigkeit

Alle Warnungen, die von BCMath-Funktionen ausgelöst werden, verwenden nun die Fehlerbehandlung von PHP. Zuvor wurden einige Warnungen direkt nach stderr geschrieben.

Die Funktionen bcmul() und bcpow() geben nun Zahlen mit der geforderten Genauigkeit zurück. Zuvor wurden in den zurückgegebenen Zahlen unter Umständen die Dezimalnullen am Ende weggelassen.

IMAP, POP3 und NNTP

Anmeldungen über rsh/ssh sind standardmäßig deaktiviert. Um dies zu ändern, muss imap.enable_insecure_rsh verwendet werden. Es ist zu beachten, dass die IMAP-Bibliothek die Namen der Postfächer nicht filtert, bevor sie an den rsh/ssh-Befehl übergeben werden. Daher sollten bei aktiviertem rsh/ssh keine nicht vertrauenswürdigen Daten an diesen Befehl übergeben werden.

Multibyte-Zeichenketten

Aufgrund der hinzugefügten Unterstützung für benannte Teilsuchmuster verhalten sich mb_ereg_*()-Suchmuster, die diese verwenden, anders. Insbesondere werden benannte Teilsuchmuster Teil der Treffer sein und mb_ereg_replace() wird die zusätzliche Syntax auswerten. Siehe Benannte Teilsuchmuster für weitere Informationen.

Verbesserte MySQL-Erweiterung (MySQLi)

Vorbereitete Anweisungen (Prepared Statements) geben die Sekundenbruchteile bei DATETIME-, TIME- und TIMESTAMP-Spalten mit Dezimalspezifizierer (z. B. TIMESTAMP(6) bei Verwendung von Mikrosekunden) nun korrekt an. In früheren Versionen wurden sie in den zurückgegebenen Werten einfach weggelassen.

MySQL-Funktionen (PDO_MYSQL)

Vorbereitete Anweisungen geben die Sekundenbruchteile bei DATETIME-, TIME- und TIMESTAMP-Spalten mit Dezimalspezifizierer (z. B. TIMESTAMP(6) bei Verwendung von Mikrosekunden) nun korrekt an. In früheren Versionen wurden sie in den zurückgegebenen Werten einfach weggelassen. Zu beachten ist, dass dies nur die PDO_MYSQL-Anweisungen betrifft, bei denen die Emulation vorbereiteter Anweisungen deaktiviert ist (z. B. bei Verwendung der nativen Prepair-Funktionalität von MySQL). Anweisungen, die Verbindungen mit PDO::ATTR_EMULATE_PREPARES=true verwenden (die Standardeinstellung), waren von dem behobenen Fehler nicht betroffen und erhielten bereits korrekte Sekundenbruchteile von der Engine.

Reflection

Beim Exportieren von Reflection-Objekten in Zeichenketten werden nun int und bool anstelle von integer bzw. boolean verwendet.

Standard-PHP-Bibliothek (SPL)

Wenn ein SPL-Autoloader eine Exception auslöst, werden die folgenden Autoloader nicht mehr ausgeführt. Zuvor wurden alle Autoloader ausgeführt und die Exceptions wurden verkettet.

SimpleXML

Wenn eine mathematische Operation ein SimpleXML-Objekt enthält, wird der Text nun als int oder float behandelt, je nachdem, was besser geeignet ist. Zuvor wurden Werte grundsätzlich als ints behandelt.

Eingehende Cookies

Seit PHP 7.3.23 werden die Namen eingehender 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.

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

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

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

Schleifenproblem für MYSQL mit gleichen INPUT Feldnamen

Hallo Community, ich habe ein Problem mit einer Schleife, um mit PHP Daten auszugeben. Ich möchte einen Zufallsgenerator programmieren, damit ic ...

Geschrieben von Crankyling am 01.05.2024 22:40:38
Forum: PHP Developer Forum
What defines Laravel's developer community?

What factors contribute to the perceived happiness within the Laravel developer community, and how does this compare to other developer communitie ...

Geschrieben von BakhamMamodar am 01.05.2024 10:45:23
Forum: PHP Developer Forum
"How to warm cold entrance?"

What are some effective strategies for addressing the significant heat loss occurring in the entrance hall, which is noticeably the coldest area o ...

Geschrieben von NeerMohan am 01.05.2024 06:49:27
Forum: Fragen/Vorschläge zum Forum
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