Heim > Schlagzeilen > Hauptteil

Das erwartete PHP7.4

藏色散人
Freigeben: 2019-09-30 18:07:21
nach vorne
10698 Leute haben es durchsucht

Das erwartete PHP7.4

PHP 7.4 ist die nächste Nebenversion von PHP 7 und wird voraussichtlich am 28. November 2019 zur allgemeinen Verfügbarkeit freigegeben. Werfen wir einen Blick auf die neuen Funktionen in PHP 7.4, die PHP schneller und zuverlässiger machen.

Natürlich freue ich mich mehr auf PHP 8. Da einige Vorschläge von JIT genehmigt wurden, könnte dies ein weiterer Meilenstein für PHP werden.

Was ist neu in PHP mit PHP 7.4?

● Unterstützung des Entpackens innerhalb von Arrays – Array-Spread-Operator

● Pfeilfunktion 2.0 (kürzerer Abschluss)

PHP 7.4 in Arrays Der Spread-Operator

wird in Ausdrücken eingeführt und ist seit PHP 5.6 verfügbar. Parameter unpacking ist eine Syntax zum Entpacken von Arrays und Traverable in Parameterlisten. Um ein Array oder Traversable zu entpacken, muss ihm ... (3 Punkte) vorangestellt werden, wie im folgenden Beispiel:

  function test(...$args) { var_dump($args); }
  test(1, 2, 3);
Nach dem Login kopieren

PHP 7.4 RFC empfiehlt jedoch, diese Funktionalität auf Arrays zu erweitern Definition:

  $arr = [...$args];
Nach dem Login kopieren

Der erste Vorteil des Spread-Operators ist die Leistung, und in der RPC-Dokumentation heißt es, dass der :

Spread-Operator eine bessere Leistung als array_merge haben sollte. Es ist nicht nur so, dass der Spread-Operator ein Syntaxkonstrukt und array_merge eine Methode ist. Auch zur Kompilierzeit werden konstante Arrays für eine hohe Effizienz optimiert. Ein wesentlicher Vorteil des Spread-Operators besteht darin, dass er jedes durchquerbare Objekt unterstützt, während die Funktion array_merge nur Arrays unterstützt.

Hier ist ein Beispiel für Parameter in einem Array mit dem Spread-Operator:

   $parts = ['apple', 'pear'];
  $fruits = ['banana', 'orange', ...$parts, 'watermelon'];
  var_dump($fruits);
Nach dem Login kopieren

Wenn Sie diesen Code in PHP 7.3 oder früher ausführen, gibt PHP einen Parse-Fehler aus:

Parse error: syntax error, unexpected '...' (T_ELLIPSIS), expecting ']' in /app/spread-operator.php on line 3
Nach dem Login kopieren

Stattdessen gibt PHP 7.4 ein Array zurück

array(5) {
    [0]=>
    string(6) "banana"
    [1]=>
    string(6) "orange"
    [2]=>
    string(5) "apple"
    [3]=>
    string(4) "pear"
    [4]=>
    string(10) "watermelon"
  }
Nach dem Login kopieren

Der RFC gibt an, dass wir dasselbe Array mehrmals erweitern können. Darüber hinaus können wir die Syntax des Spread-Operators an einer beliebigen Stelle im Array verwenden, da reguläre Elemente vor oder nach dem Spread-Operator hinzugefügt werden können. Daher funktioniert der folgende Code wie erwartet:

$arr1 = [1, 2, 3];
  $arr2 = [4, 5, 6];
  $arr3 = [...$arr1, ...$arr2];
  $arr4 = [...$arr1, ...$arr3, 7, 8, 9];
Nach dem Login kopieren

Es ist auch möglich, das von der Funktion zurückgegebene Array als Parameter zu übergeben und in ein neues Array einzufügen:

function buildArray(){
    return ['red', 'green', 'blue'];
  }
  $arr1 = [...buildArray(), 'pink', 'violet', 'yellow'];
Nach dem Login kopieren

PHP 7.4-Ausgaben das folgende Array:

array(6) {
    [0]=>
    string(3) "red"
    [1]=>
    string(5) "green"
    [2]=>
    string(4) "blue"
    [3]=>
    string(4) "pink"
    [4]=>
    string(6) "violet"
    [5]=>
    string(6) "yellow"
  }
Nach dem Login kopieren

Wir können auch den

Generator

verwenden:

, aber die Übergabe als Referenz ist nicht zulässig. Betrachten Sie das folgende Beispiel:

$arr1 = ['red', 'green', 'blue'];
  $arr2 = [...&$arr1];
Nach dem Login kopieren

Wenn wir versuchen, per Referenz zu übergeben, gibt PHP den folgenden Parse-Fehler aus:

Parse error: syntax error, unexpected '&' in /app/spread-operator.php on line 3
Nach dem Login kopieren

Wenn die Elemente des ersten Arrays per Referenz gespeichert werden, dann sind sie es wird auch per Referenz im zweiten Array gespeichert. Hier ist ein Beispiel:

   $arr0 = 'red';
  $arr1 = [&$arr0, 'green', 'blue'];
  $arr2 = ['white', ...$arr1, 'black'];
Nach dem Login kopieren

Das bekommen wir mit PHP 7.4:

array(5) {
    [0]=>
    string(5) "white"
    [1]=>
    &string(3) "red"
    [2]=>
    string(5) "green"
    [3]=>
    string(4) "blue"
    [4]=>
    string(5) "black"
  }
Nach dem Login kopieren

Arrow Functions 2.0 (Short Closures)

In PHP , Anonyme Funktionen gelten als sehr ausführlich und schwierig zu implementieren und zu warten.

RFC

empfiehlt die Einführung einer einfacheren und klareren Pfeilfunktionssyntax (oder eines kurzen Verschlusses), damit wir Code prägnant schreiben können. Vor PHP 7.4:

function cube($n){
    return ($n * $n * $n);
  }
  $a = [1, 2, 3, 4, 5];
  $b = array_map('cube', $a);
  print_r($b);
Nach dem Login kopieren

PHP 7.4 ermöglicht eine prägnantere Syntax, die obige Funktion kann wie folgt umgeschrieben werden:

$a = [1, 2, 3, 4, 5];
  $b = array_map(fn($n) => $n * $n * $n, $a);
  print_r($b);
Nach dem Login kopieren

Derzeit ist aufgrund der Sprachstruktur

Anonyme Funktionen

(Abschlüsse) können mithilfe von use Variablen erben, die im übergeordneten Bereich definiert sind, wie unten gezeigt:

Aber in PHP 7.4 wird der Wert des übergeordneten Bereichs implizit erfasst (implizit gebunden). um den Umfang des Wertes). Wir können diese Funktion also in einer Zeile vervollständigen:

$factor = 10;
  $calc = fn($num) => $num * $factor;
Nach dem Login kopieren

Variablen, die im übergeordneten Bereich definiert sind, können für Pfeilfunktionen verwendet werden. Dies entspricht unserer Verwendung und kann vom übergeordneten Element nicht geändert werden.

Die neue Syntax stellt eine große Verbesserung der Sprache dar, da sie es uns ermöglicht, besser lesbaren und wartbareren Code zu erstellen.

NULL-Koaleszieroperator

Aufgrund der großen Anzahl von Situationen, in denen ternäre Ausdrücke und isset() im täglichen Gebrauch gleichzeitig verwendet werden, haben wir den Nullkoaleszieroperator (? ?) Dieser syntaktische Zucker. Wenn die Variable existiert und nicht NULL ist, gibt sie ihren eigenen Wert zurück, andernfalls gibt sie ihren zweiten Operanden zurück.

$username = $_GET['user'] ?? ‘nobody';
Nach dem Login kopieren

Die Funktionsweise dieses Codes ist sehr einfach: Er ruft den Anforderungsparameter ab und legt einen Standardwert fest, wenn dieser nicht vorhanden ist. Aber was ist, wenn wir in diesem RFC-Beispiel längere Variablennamen haben?

$this->request->data['comments']['user_id'] = $this->request->data['comments']['user_id'] ?? 'value';
Nach dem Login kopieren

长远来看,这段代码可能难以维护。因此,旨在帮助开发人员编写更直观的代码,这个 RFC 建议引入 null 合并等于运算符 (null_coalesce_equal_operator)??=,所以我们可以敲下面这段代码来替代上面的这段代码:

$this->request->data['comments']['user_id'] ??= ‘value’;
Nach dem Login kopieren

如果左侧参数的值为 null,则使用右侧参数的值。

注意,虽然 coalesce 运算符 ?? 是一个比较运算符,但 ??= 它是赋值运算符。

Verwandte Etiketten:
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage