Neu in PHP 7.4

Obwohl die neue Version von PHP geringfügig ist, bringt sie bereits viele neue, ohne Übertreibung coole Funktionen sowohl für die Syntax der Sprache als auch für ihre Leistung. Die Liste der Innovationen ist noch nicht endgültig, aber die wichtigsten Änderungen wurden bereits vorgenommen und akzeptiert. Die Veröffentlichung ist für Dezember 2019 geplant.



Wichtige Änderungen für die kommende Version:

  • Typisierte Klasseneigenschaften
  • Vorspannung für bessere Leistung
  • Pfeilfunktionen zum Kurzschreiben anonymer Funktionen
  • Zuweisen eines Vereinigungsoperators mit null (?? =)
  • Kovarianz / Kontravarianz bei Legacy-Methodensignaturen
  • Eine externe Funktionsschnittstelle, die neue Möglichkeiten für die Entwicklung von Erweiterungen in PHP eröffnet
  • Operator in Arrays auspacken

Lesen Sie mehr über diese und andere Änderungen unter der Katze.

Haftungsausschluss: In meinen Gesprächen mit Kollegen wurde mehrmals Brents Artikel „ Neu in PHP 7.4 “ vorgestellt. Zuerst wollte ich eine Übersetzung machen, aber dabei wurde mir klar, dass nicht alle neuesten Aktualisierungen im Text angegeben sind und es einige Ungenauigkeiten gibt, so dass dieser Artikel anstelle der Übersetzung erschien.

Pfeilfunktionen ( RFC )


Mit den Pfeilfunktionen können Sie anonyme Funktionen kürzer aufzeichnen:

array_map(function (User $user) {    return $user->id; }, $users) array_map(fn(User $user) => $user->id, $users) 

Einige Merkmale der übernommenen Implementierung von Pfeilfunktionen:

  • Sie können auf den parent Bereich zugreifen, sodass das Schlüsselwort use nicht verwendet werden muss.
  • $this auch verfügbar, wie in regulären anonymen Funktionen.
  • Pfeilfunktionen können nur eine Zeile enthalten, die auch ein Rückgabeoperator ist.

Sie können mehr darüber in diesem Artikel über Habr lesen.

Typisierte Eigenschaften ( RFC )


Hurra! Klasseneigenschaften können jetzt einen Typhinweis haben. Dies ist eine sehr lang erwartete Änderung seit PHP 7 hin zu einer stärkeren Typisierung der Sprache. Jetzt haben wir alle Grundfunktionen für starkes Tippen. Alle Typen können eingegeben werden, außer void und callable.

 class Bar {   public string $name;   public ?int $amount;   public Foo $foo; } 

Wenn Sie möchten, dass ich die neuen Möglichkeiten zur Eingabe der Eigenschaften von Objekten genauer betrachte, beachten Sie dies in den Kommentaren und ich werde einen separaten Artikel darüber schreiben!

RFC- Zuweisungsoperator ( RFC ) zuweisen


Anstelle eines so langen Eintrags:

 $data['date'] = $data['date'] ?? new DateTime(); 

Jetzt wird es möglich sein, so zu schreiben:

 $data['date'] ??= new DateTime(); 

Array Unpacking Operator ( RFC )


Jetzt können Sie den Entpack-Operator in Arrays verwenden:

 $arrayA = [1, 2, 3]; $arrayB = [4, 5]; $result = [0, ...$arrayA, ...$arrayB, 6 ,7]; <i>// [0, 1, 2, 3, 4, 5, 6, 7]</i> 

Bitte beachten Sie, dass dies nur mit nicht assoziativen Arrays funktioniert.

Externe Funktionsschnittstelle ( RFC )


Über die externe Funktionsschnittstelle (FFI) können Sie C-Code direkt in PHP-Code schreiben. Dies bedeutet, dass PHP-Erweiterungen in reinem PHP geschrieben werden können.

Es ist zu beachten, dass dies ein komplexes Thema ist. Sie benötigen noch Kenntnisse in C, um diese Funktionen korrekt verwenden zu können.

Preload ( RFC )


Das Vorladen ist eine großartige Ergänzung des PHP-Kerns, die zu einigen signifikanten Leistungsverbesserungen führen sollte.

Wenn Sie beispielsweise das Framework verwenden, müssen dessen Dateien für jede Anforderung heruntergeladen und neu kompiliert werden. Bei Verwendung von Opcache - Wenn diese Dateien zum ersten Mal an der Verarbeitung einer Anforderung beteiligt sind, werden sie jedes Mal erfolgreich auf Änderungen überprüft. Durch das Vorladen kann der Server die angegebenen PHP-Dateien beim Start in den Speicher laden und sie für alle nachfolgenden Anforderungen ständig verfügbar machen, ohne zusätzliche Überprüfungen auf Dateiänderungen.

Die Leistungsverbesserung ist "nicht kostenlos". Wenn die vorinstallierten Dateien geändert werden, muss der Server neu gestartet werden.

Kovarianz / Kontravarianz bei Legacy-Methodensignaturen ( RFCs )


Derzeit hat PHP hauptsächlich invariante Parametertypen und invariante Rückgabetypen. Mit dieser Änderung können Sie den Typ des Parameters in einen seiner Supertypen ändern. Der zurückgegebene Typ kann wiederum durch seinen Subtyp ersetzt werden. Diese Änderung wird es daher ermöglichen, dem Substitutionsprinzip von Barbara Liskov strenger zu folgen.

Ein Beispiel für die Verwendung eines kovarianten Rückgabetyps:

 interface Factory {   function make(): object; } class UserFactory implements Factory {   function make(): User; } 

und kontravariantes Argument:

 interface Concatable {   function concat(Iterator $input); } class Collection implements Concatable {   function concat(iterable $input) {/* . . . */} } 

Benutzerdefinierte Objektserialisierung ( RFC )


Es stehen zwei neue magische Methoden zur Verfügung: __serialize und __unserialize . Dieser Serialisierungsmechanismus kombiniert die Vielseitigkeit der Serializable Schnittstelle mit dem Ansatz der Implementierung von __sleep/__wakeup Methoden. Weitere Details zu ihren Unterschieden finden Sie im RFC.

Verkettungspriorität ( RFC )


Wenn Sie so etwas geschrieben haben:

 echo "sum: " . $a + $b; 

PHP würde dies nun so interpretieren:

 echo ("sum: " . $a) + $b; 

PHP 8 wird dies anders interpretieren:

 echo "sum :" . ($a + $b); 

PHP 7.4 fügt eine Veralterungswarnung hinzu, wenn ein Ausdruck erkannt wird, der "." vor dem "+" oder "-" und nicht von Klammern umgeben.

__toString ( RFC ) __toString


Bisher konnten Ausnahmen von der magischen Methode __toString nicht ausgelöst werden. Der Grund für dieses Verhalten ist, dass die Konvertierung von Objekten in Zeichenfolgen in vielen Funktionen der Standardbibliothek durchgeführt wird und nicht alle bereit sind, Ausnahmen korrekt zu "verarbeiten". Im Rahmen dieses RFC wurde eine umfassende Prüfung der Zeichenfolgenkonvertierungen in der Codebasis durchgeführt, und diese Einschränkung kann nun aufgehoben werden.

Link Reflection ( RFC )


Bibliotheken wie symfony/var-dumper verlassen sich stark auf ReflectionAPI , um Variablen genau anzuzeigen. Bisher gab es keine angemessene Unterstützung für die Linkreflexion, was diese Bibliotheken dazu zwang, sich auf Hacks zu verlassen, um Links zu erkennen. PHP 7.4 fügt eine ReflectionReference Klasse hinzu, die dieses Problem löst.

RFC- Methode ( mb_str_split ) hinzugefügt


Diese Funktion bietet die gleiche Funktionalität wie str_split , jedoch für Zeichenfolgen, die in Multibyte-Codierungen geschrieben sind.

Immer verfügbare ext-hash Erweiterung ( RFC )


Diese Erweiterung ist jetzt in allen PHP-Installationen ständig verfügbar.

PEAR ist standardmäßig nicht aktiviert ( EXTERNALS )


PEAR wird nicht mehr aktiv unterstützt. Das Kernteam hat beschlossen, es aus der Standardinstallation mit PHP 7.4 zu entfernen.

RFC (Password Hashing Algorithm Registry)


Eine neue password_algos Funktion wurde hinzugefügt, die eine Liste aller registrierten Passwort-Hashing-Algorithmen zurückgibt.

Schwache Links ( RFC )


Mit schwachen Links können Sie einen Link zu einem Objekt speichern, der die Zerstörung dieses Objekts nicht verhindert. Sie sind beispielsweise nützlich, um cacheähnliche Strukturen zu implementieren.

Zahlenliteraltrennzeichen ( RFC )


Das Fehlen visueller Trennzeichen in Zifferngruppen verlängerte die Zeit zum Lesen und Debuggen des Codes und konnte zu unbeabsichtigten Fehlern führen. Jetzt wurde die Unterstützung für den Unterstrich in numerischen Literalen hinzugefügt, um Gruppen von Zahlen visuell zu trennen.

 1_000_000_000 // int 6.674_083e-11; // float 299_792_458;   // decimal 0xCAFE_F00D;  // hexadecimal 0b0101_1111;   // binary 0137_041;      // octal 

Kurze offene Tags veraltet ( RFC )


Kurzes Eröffnungs-Tag <? ist veraltet und wird in PHP 8 entfernt. Das kurze Tag <?= (echo) nicht betroffen.

Linker assoziativer ternärer Operator abgelehnt veraltet ( RFC )


Der ternäre Operator hat einige seltsame Macken in PHP. Dieser RFC veraltet verschachtelte ternäre Operatoren.

 1 ? 2 : 3 ? 4 : 5;   // deprecated (1 ? 2 : 3) ? 4 : 5; // ok 

In PHP 8 führt ein solcher Datensatz zu einem Fehler auf Kompilierungsebene.

Rückwärts inkompatible Änderungen ( UPGRADING )


Hier sind einige der wichtigsten rückwärts inkompatiblen Änderungen:

  • Ein Aufruf von parent:: in einer Klasse ohne übergeordnetes Element ist veraltet.
  • Durch Aufrufen von var_dump für eine Instanz von DateTime oder DateTimeImmutable keine DateTimeImmutable mehr verfügbar.
  • openssl_random_pseudo_bytes in Fehlersituationen, die durch die OpenSSL-Bibliothek verursacht werden, eine Ausnahme aus. Zuvor wurde false zurückgegeben, was zur Generierung einer leeren Zeichenfolge führen konnte.
  • Beim Versuch, ein PDO oder eine Instanz eines PDOStatement zu serialisieren, wird eine Exception anstelle einer PDOException .
  • get_object_vars() Sie get_object_vars() für eine ArrayObject Instanz ArrayObject die Eigenschaften des ArrayObject selbst zurückgegeben, nicht der Wert des ArrayObject Arrays. Um ArrayObject Array-Werte wie zuvor zu erhalten, ArrayObject in den array Typ um.

Source: https://habr.com/ru/post/de454410/


All Articles