PHP 8.4.1 Released!

Neue Features

PHP-Kern

Benannte Parameter

Die Unterstützung für benannte Parameter wurde hinzugefügt.

Attribute

Die Unterstützung für Attribute wurde hinzugefügt.

Beförderung von Konstruktoreigenschaften

Die Unterstützung für die Beförderung von Konstruktoreigenschaften (Deklaration von Eigenschaften in der Konstruktorsignatur) wurde hinzugefügt.

Zusammengefasste Typen (Union-Typen)

Die Unterstützung für zusammengefasste Typen wurde hinzugefügt.

Ausdruck match

Die Unterstützung für den Ausdruck match wurde hinzugefügt.

Nullsafe-Operator

Die Unterstützung für den nullsafe-Operator (?->) wurde hinzugefügt.

Andere neue Features

  • Die Klasse WeakMap wurde hinzugefügt.

  • Die Klasse ValueError wurde hinzugefügt.

  • Eine beliebige Anzahl von Funktionsparametern kann nun durch einen variadischen Parameter ersetzt werden, solange die Typen kompatibel sind. Zum Beispiel ist der folgende Code nun erlaubt:

    <?php
    class A {
    public function
    method(int $many, string $parameters, $here) {}
    }
    class
    B extends A {
    public function
    method(...$everything) {}
    }
    ?>

  • static (wie in "late static binding", späte statische Bindung) kann nun als Rückgabetyp verwendet werden:

    <?php
    class Test {
    public function
    create(): static {
    return new static();
    }
    }
    ?>

  • Es ist nun möglich, den Klassennamen eines Objekts mit Hilfe von $object::class zu ermitteln. Das Ergebnis ist dasselbe wie bei get_class($object).

  • new und instanceof können nun durch Verwendung von new (Ausdruck)(...$args) und $obj instanceof (Ausdruck) mit beliebigen Ausdrücken verwendet werden.

  • Es wurden einige Verbesserungen an der Einheitlichkeit der Variablensyntax vorgenommen, zum Beispiel ist Folgendes nun erlaubt: Foo::BAR::$baz.

  • Die Schnittstelle Stringable wurde hinzugefügt. Sie wird automatisch implementiert, wenn eine Klasse eine __toString()-Methode definiert.

  • Traits können nun abstrakte private Methoden definieren. Diese Methoden müssen von der Klasse implementiert werden, die den Trait verwendet.

  • throw kann nun als Ausdruck verwendet werden. Das ermöglicht Verwendungen wie:

    <?php
    $fn
    = fn() => throw new Exception('Exception in der Pfeilfunktion');
    $user = $session->user ?? throw new Exception('Muss einen Benutzer haben');

  • In Parameterlisten ist nun ein optionales Komma am Ende erlaubt.

    <?php
    function functionWithLongSignature(
    Type1 $parameter1,
    Type2 $parameter2, // <-- Dieses Komma ist nun erlaubt.
    ) {
    }

  • Es ist nun möglich, catch (Exception) zu schreiben, um eine Ausnahme abzufangen, ohne sie in einer Variablen zu speichern.

  • Die Unterstützung für den Typ mixed wurde hinzugefügt.

  • Private Methoden, die in einer übergeordneten Klasse deklariert wurden, erzwingen für die Methoden einer Kindklasse keine Vererbungsregeln mehr (mit Ausnahme von finalen privaten Konstruktoren). Das folgende Beispiel veranschaulicht, welche Einschränkungen aufgehoben wurden:

    <?php
    class ParentClass {
    private function
    method1() {}
    private function
    method2() {}
    private static function
    method3() {}
    // Löst eine Warnung aus, da "final" keine Bedeutung mehr hat:
    private final function method4() {}
    }
    class
    ChildClass extends ParentClass {
    // Alles Folgende ist nun erlaubt, auch wenn die Modifikatoren nicht
    // dieselben sind wie bei den privaten Methoden in der Elternklasse.
    public abstract function method1() {}
    public static function
    method2() {}
    public function
    method3() {}
    public function
    method4() {}
    }
    ?>

  • Die Funktion get_resource_id() wurde hinzugefügt. Sie gibt denselben Wert zurück wie (int) $resource und bietet dieselbe Funktionalität mit einer übersichtlicheren API.

  • Die Klasse InternalIterator wurde hinzugefügt.

Datum und Uhrzeit

DOM

Die Schnittstellen DOMParentNode und DOMChildNode mit neuen Traversal- und Kontroll-APIs wurden hinzugefügt.

Filter

FILTER_VALIDATE_BOOL wurde als Alias für FILTER_VALIDATE_BOOLEAN hinzugefügt. Der neue Name sollte bevorzugt werden, weil er den kanonischen Typnamen verwendet.

Enchant

Die Funktionen enchant_dict_add(), enchant_dict_is_added() und die Konstante LIBENCHANT_VERSION wurden hinzugefügt.

FPM

Die neue Option pm.status_listen wurde hinzugefügt. Sie ermöglicht es, den Status von einem anderen Endpunkt zu erhalten (z. B. Port oder UDS-Datei). Dies ist nützlich, um den Status zu erhalten, wenn alle Kindprozesse mit der Bearbeitung lang laufender Anfragen beschäftigt sind.

Hash

HashContext-Objekte können nun serialisiert werden.

Funktionen für die Internationalisierung

Die Konstanten IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::RELATIVE_MEDIUM und IntlDateFormatter::RELATIVE_SHORT wurden hinzugefügt.

LDAP

Die Funktion ldap_count_references() wurde hinzugefügt; sie gibt die Anzahl der Referenzmeldungen in einem Suchergebnis zurück.

OPcache

Wenn die ini-Einstellung opcache.record_warnings aktiviert ist, zeichnet OPcache die Warnungen auf, die bei der Kompilierung auftreten, und gibt sie beim nächsten Include wieder, auch wenn sie aus dem Cache geliefert werden.

OpenSSL

Die Unterstützung für die Cryptographic Message Syntax (CMS) (» RFC 5652), die aus Funktionen zum Verschlüsseln, Entschlüsseln, Signieren, Überprüfen und Lesen besteht, wurde hinzugefügt. Die API ist der API für PKCS-#7-Funktionen ähnlich und enthält darüber hinaus folgende neue Verschlüsselungskonstanten: OPENSSL_ENCODING_DER, OPENSSL_ENCODING_SMIME und OPENSSL_ENCODING_PEM:

  • openssl_cms_encrypt() verschlüsselt die Nachricht in der Datei mit den Zertifikaten und gibt das Ergebnis in der angegebenen Datei aus.
  • openssl_cms_decrypt() entschlüsselt die S/MIME-Nachricht in der Datei und gibt das Ergebnis in der angegebenen Datei aus.
  • openssl_cms_read() exportiert die CMS-Datei in ein Array von PEM-Zertifikaten.
  • openssl_cms_sign() signiert die MIME-Nachricht in der Datei mit einem Zertifikat und einem Schlüssel und gibt das Ergebnis in der angegebenen Datei aus.
  • openssl_cms_verify() verifiziert, dass der Datenblock intakt ist, der Unterzeichner der ist, für den er sich ausgibt, und gibt die Zertifikate der Unterzeichner zurück.

Reguläre Ausdrücke (Perl-kompatibel)

Die Funktion preg_last_error_msg() wurde hinzugefügt. Sie gibt eine menschenlesbare Meldung für den letzten PCRE-Fehler zurück und ergänzt die Funktion preg_last_error(), die einen Integer-Enum-Wert zurückgibt.

Reflection

SQLite3

Die Methode SQLite3::setAuthorizer() und entsprechende Klassenkonstanten wurden hinzugefügt. Damit ist es möglich, eine benutzerdefinierte Callback-Funktion anzugeben, die verwendet wird, um eine Aktion in der Datenbank zu autorisieren oder nicht.

Standard-Funktionsbibliothek

  • Die Funktionen str_contains(), str_starts_with() und str_ends_with() wurden hinzugefügt. Sie prüfen, ob haystack needle enthält bzw. damit beginnt oder endet.

  • Die Funktion fdiv() wurde hinzugefügt. Sie führt eine Gleitkomma-Division nach IEEE 754-Semantik durch. Die Division durch Null wird als wohldefiniert betrachtet und gibt einen der Werte Inf, -Inf oder NaN zurück.

  • Die Funktion get_debug_type() wurde hinzugefügt. Sie gibt einen Typ zurück, der für Fehlermeldungen nützlich ist. Anders als gettype() verwendet sie kanonische Typnamen, gibt die Klassennamen von Objekten zurück und nennt bei Ressourcen den Ressourcentyp.

  • Die Funktionen printf() und Freunde unterstützen nun die Formatangaben %h und %H. Diese sind vergleichbar mit %g und %G, verwenden aber immer "." als Dezimaltrennzeichen, anstatt es durch die LC_NUMERIC-Locale zu bestimmen.

  • Die Funktionen printf() und Freunde unterstützen nun die Verwendung von "*" als Breite oder Genauigkeit. In diesem Fall wird die Breite/Genauigkeit als Parameter an printf übergeben. Außerdem ermöglicht dies bei %g, %G, %h und %H die Verwendung der Genauigkeit -1. Zum Beispiel kann der folgende Code verwendet werden, um die standardmäßige Gleitkomma-Formatierung von PHP zu reproduzieren:

    <?php
    printf
    ("%.*H", (int) ini_get("precision"), $float);
    printf("%.*H", (int) ini_get("serialize_precision"), $float);
    ?>

  • Die Funktion proc_open() unterstützt nun Pseudo-Terminal (PTY)-Deskriptoren. Das folgende hängt stdin, stdout und stderr an dasselbe PTY an:

    <?php
    $proc
    = proc_open($command, [['pty'], ['pty'], ['pty']], $pipes);
    ?>

  • proc_open() unterstützt nun Socket-Paar-Deskriptoren. Das folgende fügt ein bestimmtes Socket-Paar an stdin, stdout und stderr an:

    <?php
    $proc
    = proc_open($command, [['socket'], ['socket'], ['socket']], $pipes);
    ?>

    Im Gegensatz zu Pipes gibt es bei Sockets unter Windows keine Probleme mit blockierenden I/Os. Allerdings funktionieren nicht alle Programme korrekt mit stdio-Sockets.

  • Die Sortierfunktionen verwenden nun eine stabile Sortierung. Das bedeutet, dass Elemente, die verglichen und für gleich befunden werden, ihre ursprüngliche Reihenfolge beibehalten.

  • Die Funktionen array_diff(), array_intersect() und ihre Variationen können nun mit einem einzigen Array als Parameter verwendet werden. Das bedeutet, dass Verwendungen wie die folgende nun möglich sind:

    <?php
    // OK, auch wenn $excludes leer ist:
    array_diff($array, ...$excludes);
    // OK, auch wenn $arrays nur ein einziges Array enthält:
    array_intersect(...$arrays);
    ?>

  • Der Parameter flag der Funktion ob_implicit_flush() akzeptiert nun ein bool anstelle eines int.

Tokenizer

Die Klasse PhpToken fügt dem Tokenizer eine objektbasierte Schnittstelle hinzu. Diese Klasse bietet eine einheitlichere und ergonomischere Darstellung ist zudem speichereffizienter und schneller.

Zip

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top