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 {
         public function 
    method(int $manystring $parameters$here) {}
    }
    class 
    extends {
         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.

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

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

Notizen-App: was ist eure - ich komm immer wieder auf Keep zurück...

Hallo liebe Community, guten Abend, Notizen-App: was ist eure - ich komm immer wieder auf Keep zurück... was ist eure beste NoteTaking App!? i ...

Geschrieben von dhubs am 22.12.2024 23:05:11
Forum: Off-Topic Diskussionen
How to overcome Safari's iframe cookie block?

To overcome Safari's iframe cookie block, you can use the SameSite=None; Secure cookie attribute in conjunction with a third-party domain that sup ...

Geschrieben von Joniemartinez am 21.12.2024 13:28:24
Forum: HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS
Probleme mit speichern in Datenbank in französisch

Les erreurs fréquentes lors de l'enregistrement de données dans une base de données incluent des problèmes de connexion, des erreurs de syntax ...

Geschrieben von Alice12 am 18.12.2024 05:07:21
Forum: PHP Developer Forum
Gibt es eine API zum Abrufen von PHP-Code-Referenzen?

PHP.net bietet eine umfassende Online-Dokumentation für PHP. Es gibt keine offizielle API zum Abrufen von PHP-Dokumentationen direkt, aber du kan ...

Geschrieben von Alice12 am 18.12.2024 05:03:27
Forum: PHP Developer Forum