From aada8756b2b567c1416ec4149a119ce35f36a424 Mon Sep 17 00:00:00 2001 From: lacatoire Date: Sun, 7 Jun 2026 19:03:11 +0200 Subject: [PATCH] =?UTF-8?q?[Sync=20EN]=20appendix=208.4=20new=20features:?= =?UTF-8?q?=20=C3=BCbersetze=20new-features?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appendices/migration84/new-features.xml | 653 ++++++++++++++++++++++++ 1 file changed, 653 insertions(+) create mode 100644 appendices/migration84/new-features.xml diff --git a/appendices/migration84/new-features.xml b/appendices/migration84/new-features.xml new file mode 100644 index 000000000..8727f0e31 --- /dev/null +++ b/appendices/migration84/new-features.xml @@ -0,0 +1,653 @@ + + + + + Neue Features + + + + PHP-Kern + + + + Property Hooks + + + Objekteigenschaften können nun zusätzliche Logik mit ihren + get- und set-Operationen verknüpfen. + Je nach Verwendung kann dies die Eigenschaft virtuell machen oder auch nicht, + das heißt, sie besitzt überhaupt keinen hinterlegten Wert. + + + + + $this->firstName . ' ' . $this->lastName; + } + + // Alle Schreiboperationen laufen durch diesen Hook, und das Ergebnis wird geschrieben. + // Der Lesezugriff erfolgt ganz normal. + public string $firstName { + set => ucfirst(strtolower($value)); + } + + // Alle Schreiboperationen laufen durch diesen Hook, der selbst in den hinterlegten Wert schreiben muss. + // Der Lesezugriff erfolgt ganz normal. + public string $lastName { + set { + if (strlen($value) < 2) { + throw new \InvalidArgumentException('Too short'); + } + $this->lastName = $value; + } + } +} + +$p = new Person(); + +$p->firstName = 'peter'; +print $p->firstName; // Gibt "Peter" aus +$p->lastName = 'Peterson'; +print $p->fullName; // Gibt "Peter Peterson" aus + +$p->fullName = "Peter 'Pete' Peterson"; // Wirft Error: "Property Person::$fullName is read-only" +]]> + + + + + + + Asymmetrische Sichtbarkeit von Eigenschaften + + + Bei Objekteigenschaften kann nun die set-Sichtbarkeit + getrennt von der get-Sichtbarkeit gesteuert werden. + + + +name = $name; + } +} +]]> + + + + + + + Lazy-Objekte + + Es ist nun möglich, Objekte zu erzeugen, deren Initialisierung + aufgeschoben wird, bis auf sie zugegriffen wird. Bibliotheken und Frameworks + können diese Lazy-Objekte nutzen, um das Abrufen von Daten oder + Abhängigkeiten, die zur Initialisierung benötigt werden, aufzuschieben. + + + +__construct($data); +}; + +$reflector = new ReflectionClass(Example::class); +$object = $reflector->newLazyGhost($initializer); +]]> + + + + + + + Attribut <code>#[\Deprecated]</code> + + + Das neue Attribut Deprecated kann verwendet werden, um + Funktionen, Methoden und Klassenkonstanten als veraltet zu markieren. Das + Verhalten von Funktionalität, die mit diesem Attribut als veraltet markiert + wird, entspricht dem Verhalten des bestehenden Mechanismus zur + Veraltungskennzeichnung für von PHP selbst bereitgestellte Funktionalität. + Die einzige Ausnahme besteht darin, dass der ausgegebene Fehlercode + E_USER_DEPRECATED anstelle von + E_DEPRECATED lautet. + + + + Bestehende Veraltungskennzeichnungen in von PHP selbst bereitgestellter + Funktionalität wurden auf die Verwendung des Attributs umgestellt, wodurch die + ausgegebenen Fehlermeldungen durch eine kurze Erklärung verbessert werden. + + + + + + Verarbeitung von RFC1867-Anfragen (multipart) in HTTP-Anfragen, die nicht POST sind + + + + Es wurde die Funktion request_parse_body hinzugefügt, die + das Verarbeiten von RFC1867-Anfragen (multipart) in HTTP-Anfragen ermöglicht, + die nicht POST sind. + + + + + + Verkettung von &new;-Ausdrücken ohne Klammern + + + + new-Ausdrücke mit Konstruktorargumenten können nun dereferenziert werden, das + heißt, sie erlauben das Verketten von Methodenaufrufen, Eigenschaftszugriffen + usw., ohne dass der Ausdruck in Klammern eingeschlossen werden muss. + + + + + Verbesserte Debugging-Informationen für <classname>WeakReference</classname> + + + + Beim Abrufen der Debug-Informationen für WeakReference + wird nun auch das Objekt ausgegeben, auf das es verweist, oder &null;, wenn die + Referenz nicht mehr gültig ist. + + + + + Verbesserte Debugging-Informationen für <classname>Closure</classname> + + + + Die Ausgabe von Closure::__debugInfo enthält nun den + Namen, die Datei und die Zeile der Closure. + + + + + + Definition identischer Symbole in verschiedenen Namespace-Blöcken + + + + Das Verlassen eines Namespaces löscht nun die bereits gesehenen Symbole. + Dies erlaubt die Verwendung eines Symbols in einem Namespace-Block, selbst + wenn ein vorheriger Namespace-Block ein Symbol mit demselben Namen deklariert + hat. + + + + + + + + cURL + + + curl_version gibt einen zusätzlichen Wert + feature_list zurück, ein assoziatives Array aller + bekannten cURL-Features sowie der Angabe, ob sie unterstützt werden (&true;) + oder nicht (&false;). + + + + Es wurden die Konstanten CURL_HTTP_VERSION_3 und + CURL_HTTP_VERSION_3ONLY hinzugefügt (verfügbar + seit libcurl 7.66 bzw. 7.88) als verfügbare Optionen für + CURLOPT_HTTP_VERSION. + + + + Es wurde CURLOPT_PREREQFUNCTION als cURL-Option + hinzugefügt, die ein callable akzeptiert, das aufgerufen wird, + nachdem die Verbindung hergestellt wurde, aber bevor die Anfrage gesendet wird. + Dieses Callable muss entweder CURL_PREREQFUNC_OK oder + CURL_PREREQFUNC_ABORT zurückgeben, um die Anfrage + zuzulassen oder abzubrechen. + + + + Es wurde CURLOPT_SERVER_RESPONSE_TIMEOUT hinzugefügt, + die zuvor als CURLOPT_FTP_RESPONSE_TIMEOUT bekannt war. + Beide Konstanten enthalten denselben Wert. + + + + Es wurde CURLOPT_DEBUGFUNCTION als cURL-Option + hinzugefügt, die ein callable akzeptiert, das während der + Lebensdauer der Anfrage mit dem CurlHandle-Objekt, + einem Integer mit dem Typ der Debug-Nachricht und einem String mit der + Debug-Nachricht aufgerufen wird. + Der Typ der Debug-Nachricht ist eine der folgenden Konstanten: + + CURLINFO_TEXT + CURLINFO_HEADER_IN + CURLINFO_HEADER_OUT + CURLINFO_DATA_IN + CURLINFO_DATA_OUT + CURLINFO_SSL_DATA_IN + CURLINFO_SSL_DATA_OUT + + Sobald diese Option gesetzt ist, darf + CURLINFO_HEADER_OUT nicht gesetzt werden, da es dieselbe + libcurl-Funktionalität verwendet. + + + + curl_getinfo gibt nun einen zusätzlichen Schlüssel + posttransfer_time_us zurück, der die Anzahl der + Mikrosekunden vom Start bis zum Senden des letzten Bytes enthält. + Wenn einer Weiterleitung gefolgt wird, wird die Zeit jeder Anfrage + aufsummiert. + Dieser Wert kann auch abgerufen werden, indem + CURLINFO_POSTTRANSFER_TIME_T an den Parameter + option von curl_getinfo übergeben + wird. + Dies erfordert libcurl 8.10.0 oder neuer. + + + + + DOM + + + + + Es wurde der Namespace Dom mit neuen Klassen als + Gegenstücke zu den bestehenden DOM-Klassen hinzugefügt (z. B. ist + Dom\Node das neue DOMNode). + Diese Klassen sind mit HTML 5 kompatibel und entsprechen der + WHATWG-Spezifikation; damit werden seit Langem bestehende Fehler in der + DOM-Erweiterung behoben. + Die alten DOM-Klassen bleiben aus Gründen der Abwärtskompatibilität + verfügbar. + + + + Es wurde DOMNode::compareDocumentPosition mit den + zugehörigen Konstanten hinzugefügt: + + DOMNode::DOCUMENT_POSITION_DISCONNECTED + DOMNode::DOCUMENT_POSITION_PRECEDING + DOMNode::DOCUMENT_POSITION_FOLLOWING + DOMNode::DOCUMENT_POSITION_CONTAINS + DOMNode::DOCUMENT_POSITION_CONTAINED_BY + DOMNode::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC + + + + + + Es ist nun möglich, ein beliebiges Callable an + DOMXPath::registerPhpFunctions zu übergeben. + + Darüber hinaus können mit + DOMXPath::registerPhpFunctionNs nun Callbacks + registriert werden, die die native Funktionsaufrufsyntax verwenden, anstatt + php:function('name') zu nutzen. + + + + + Intl + + + Es wurde NumberFormatter::ROUND_HALFODD hinzugefügt, um + die bestehende Funktionalität von + NumberFormatter::ROUND_HALFEVEN zu ergänzen. + + + + + OpenSSL + + + Es wurde Unterstützung für auf Curve25519 + Curve448 basierende Schlüssel + hinzugefügt. + Konkret werden die Felder x25519, ed25519, x448 und ed448 unterstützt; + openssl_pkey_new, + openssl_pkey_get_details, + openssl_sign und + openssl_verify wurden erweitert, um diese Schlüssel zu + unterstützen. + + + + Implementierung des Passwort-Hashings mit PASSWORD_ARGON2. + Erfordert OpenSSL 3.2 und einen NTS-Build. + + + + + PCRE + + + Die mitgelieferte pcre2lib wurde auf Version 10.44 aktualisiert. + Dadurch wurde Unterstützung für LoongArch-JIT hinzugefügt, Leerzeichen + sind nun zwischen geschweiften Klammern in Perl-kompatiblen Elementen + erlaubt, und Lookbehind-Assertions mit variabler Länge werden nun + unterstützt. + + + + Mit der pcre2lib-Version 10.44 hat sich die maximale Länge benannter + Capture-Gruppen von 32 auf 128 geändert. + + + + Es wurde Unterstützung für den Modifikator r + (PCRE2_EXTRA_CASELESS_RESTRICT) sowie für den Modus-Modifikator + (?r) hinzugefügt. + Wenn dieser zusammen mit dem Modifikator für Groß-/Kleinschreibungs- + Unabhängigkeit (i) aktiviert wird, verbietet der Ausdruck + das Vermischen von ASCII- und Nicht-ASCII-Zeichen. + + + + + PDO + + + + Es wurde Unterstützung für treiberspezifische Unterklassen hinzugefügt, um + datenbankspezifische Funktionalitäten besser zu unterstützen. + Die neuen Klassen können entweder durch den Aufruf der Methode + PDO::connect oder durch direktes Instanziieren einer + der treiberspezifischen Unterklassen instanziiert werden. + + + + + Es wurde Unterstützung für treiberspezifische SQL-Parser hinzugefügt. + Wenn kein treiberspezifischer Parser verfügbar ist, wird der Standard-Parser + verwendet. + Der Standard-Parser unterstützt: + + + in einfache und doppelte Anführungszeichen gesetzte Literale, mit + Verdopplung als Escaping-Mechanismus + + + Kommentare mit zwei Bindestrichen und nicht verschachtelte Kommentare im + C-Stil + + + + + + + PDO_MYSQL + + + + Es wurde ein benutzerdefinierter Parser hinzugefügt, der Folgendes + unterstützt: + + + in einfache und doppelte Anführungszeichen gesetzte Literale, mit + Verdopplung und Backslash als Escaping-Mechanismus + + + in Backticks gesetzte Bezeichner-Literale mit Verdopplung als + Escaping-Mechanismus + + + zwei Bindestriche gefolgt von mindestens einem Leerzeichen, nicht + verschachtelte Kommentare im C-Stil sowie Hash-Kommentare + + + + + + + PDO_PGSQL + + + + Es wurde ein benutzerdefinierter Parser hinzugefügt, der Folgendes + unterstützt: + + + in einfache und doppelte Anführungszeichen gesetzte Literale, mit + Verdopplung als Escaping-Mechanismus + + + String-Literale im C-Stil ("escape") (E'string') + + + in Dollarzeichen gesetzte String-Literale + + + Kommentare mit zwei Bindestrichen und Kommentare im C-Stil (nicht + verschachtelt) + + + Unterstützung für ?? als Escape-Sequenz für den + Operator ? + + + + + + + PDO_SQLITE + + + + Es wurde ein benutzerdefinierter Parser hinzugefügt, der Folgendes + unterstützt: + + + in einfache und doppelte Anführungszeichen sowie in Backticks gesetzte + Literale, mit Verdopplung als Escaping-Mechanismus + + + in eckige Klammern gesetzte Bezeichner + + + Kommentare mit zwei Bindestrichen und Kommentare im C-Stil (nicht + verschachtelt) + + + + + + + Phar + + + Es wurde Unterstützung für die Unix-Zeitstempel-Erweiterung bei + Zip-Archiven hinzugefügt. + + + + + Readline + + + Es wurde die Möglichkeit hinzugefügt, den Pfad zu + .php_history über die Umgebungsvariable + PHP_HISTFILE zu ändern. + + + + + Reflection + + + ReflectionAttribute enthält nun eine Eigenschaft + name, um das Debugging-Erlebnis zu verbessern. + + + + ReflectionClassConstant::__toString und + ReflectionProperty::__toString geben nun die + zugehörigen Doc-Kommentare zurück. + + + + + Es wurden mehrere neue Methoden und Konstanten hinzugefügt, die mit dem + Feature der Lazy-Objekte zusammenhängen: + + + + ReflectionClass::newLazyGhost + + + ReflectionClass::newLazyProxy + + + ReflectionClass::resetAsLazyGhost + + + ReflectionClass::resetAsLazyProxy + + + ReflectionClass::isUninitializedLazyObject + + + ReflectionClass::initializeLazyObject + + + ReflectionClass::markLazyObjectAsInitialized + + + ReflectionClass::getLazyInitializer + + + ReflectionProperty::skipLazyInitialization + + + ReflectionProperty::setRawValueWithoutLazyInitialization + + + ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE + + + ReflectionClass::SKIP_DESTRUCTOR + + + + + + + SOAP + + + Es wurde Unterstützung für die Clark-Notation für Namespaces in der + Klassenzuordnung (class map) hinzugefügt. + Es ist nun möglich, Einträge in einer Klassenzuordnung in Clark-Notation + anzugeben, um einen Typ mit einem bestimmten Namespace zu einer bestimmten + Klasse aufzulösen. + Zum Beispiel: '{http://example.com}foo' => 'FooClass'. + + + + Instanzen von DateTimeInterface, die an + xsd:datetime oder ähnliche Elemente übergeben werden, + werden nun als solche serialisiert, anstatt als leerer String serialisiert + zu werden. + + + + Die Sitzungspersistenz funktioniert nun mit einem gemeinsam genutzten + Sitzungsmodul. + + + + + Standard + + + + + Es wurde ein neues Enum RoundingMode mit klarerer + Benennung und verbesserter Auffindbarkeit im Vergleich zu den Konstanten + PHP_ROUND_* hinzugefügt. + Darüber hinaus wurden vier neue Rundungsmodi hinzugefügt, die nur über das + neue Enum RoundingMode verfügbar sind. + + + + + XSL + + + Es ist nun möglich, Parameter zu verwenden, die sowohl einfache als auch + doppelte Anführungszeichen enthalten. + + + + + Es ist nun möglich, ein beliebiges Callable an + XSLTProcessor::registerPhpFunctions zu übergeben. + + + + + Es wurden XSLTProcessor::$maxTemplateDepth und + XSLTProcessor::$maxTemplateVars hinzugefügt, um die + Rekursionstiefe der Auswertung von XSL-Templates zu steuern. + + + + + Zip + + + Es wurde die Konstante + ZipArchive::ER_TRUNCATED_ZIP hinzugefügt, die in + libzip 1.11 ergänzt wurde. + + + + +