ホームページ 見出し エキサイティングな PHP7.4

エキサイティングな PHP7.4

Aug 28, 2019 pm 02:20 PM

エキサイティングな PHP7.4

PHP 7.4 は PHP 7 の次のマイナー バージョンで、2019 年 11 月 28 日に一般公開される予定です。 PHP の高速化と信頼性の向上を実現する PHP 7.4 の新機能を見てみましょう。

もちろん、私は PHP 8 をもっと楽しみにしています。 JIT の提案の一部が承認されたため、これは PHP にとって新たなマイルストーンとなる可能性があります。

PHP 7.4 を使用した PHP の新機能は何ですか?

#● 配列内でのアンパックのサポート - 配列展開演算子

##● アロー関数 2.0 (短いクロージャ)

配列内の PHP 7.4 Spread 演算子

は式に導入され、PHP 5.6 以降で利用可能です。

Parameter unpacking

は、配列と Traversable をパラメータ リストに解凍するための構文です。配列または Traversable を解凍するには、次の例のように、先頭に ... (3 つのドット) を付ける必要があります。

ただし

PHP 7.4 RFC

では、この機能を配列に拡張することが推奨されています。 :

Spread 演算子の最初の利点はパフォーマンスです。

RPC ドキュメントには、

:Spread 演算子の方が array_merge よりも優れたパフォーマンスが必要であると記載されています。スプレッド演算子が構文構造であり、array_merge がメソッドであるというだけではありません。また、コンパイル時に、定数配列は高効率を実現するために最適化されます。Spread 演算子の大きな利点は、array_merge 関数が配列のみをサポートするのに対し、任意の走査可能なオブジェクトをサポートすることです。

以下は、Spread 演算子を使用した配列内のパラメーターの例です:

   $parts = ['apple', 'pear'];
  $fruits = ['banana', 'orange', ...$parts, 'watermelon'];
  var_dump($fruits);
ログイン後にコピー

このコードを PHP 7.3 以前で実行すると、PHP は解析エラーをスローします:

Parse error: syntax error, unexpected '...' (T_ELLIPSIS), expecting ']' in /app/spread-operator.php on line 3
ログイン後にコピー

代わりに、PHP 7.4 は配列を返します

array(5) {
    [0]=>
    string(6) "banana"
    [1]=>
    string(6) "orange"
    [2]=>
    string(5) "apple"
    [3]=>
    string(4) "pear"
    [4]=>
    string(10) "watermelon"
  }
ログイン後にコピー

RFC には、同じ配列を複数回拡張できると記載されています。さらに、スプレッド演算子の前後に通常の要素を追加できるため、配列内のどこでもスプレッド演算子の構文を使用できます。したがって、次のコードは期待どおりに機能します。

$arr1 = [1, 2, 3];
  $arr2 = [4, 5, 6];
  $arr3 = [...$arr1, ...$arr2];
  $arr4 = [...$arr1, ...$arr3, 7, 8, 9];
ログイン後にコピー

関数によって返された配列をパラメータとして渡し、それを新しい配列に入れることもできます。

function buildArray(){
    return ['red', 'green', 'blue'];
  }
  $arr1 = [...buildArray(), 'pink', 'violet', 'yellow'];
ログイン後にコピー

PHP 7.4 の出力次の配列:

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"
  }
ログイン後にコピー

generator

:

function generator() {
    for ($i = 3; $i <= 5; $i++) {
        yield $i;
    }
  }
  $arr1 = [0, 1, 2, ...generator()];
ログイン後にコピー

も使用できますが、参照渡しは許可されません。次の例を考えてみましょう:

参照渡ししようとすると、PHP は次の解析エラーをスローします:

Parse error: syntax error, unexpected &#39;&&#39; in /app/spread-operator.php on line 3
ログイン後にコピー

最初の配列の要素が参照によって格納されている場合、それらは2 番目の配列にも参照によって格納されます。以下は例です:

   $arr0 = &#39;red&#39;;
  $arr1 = [&$arr0, &#39;green&#39;, &#39;blue&#39;];
  $arr2 = [&#39;white&#39;, ...$arr1, &#39;black&#39;];
ログイン後にコピー

これは 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"
  }
ログイン後にコピー

Arrow Functions 2.0 (ショート クロージャ)

PHP で、匿名関数は非常に冗長で、実装と保守が難しいと考えられています。 RFC コードを簡潔に記述できるように、より単純で明確なアロー関数 (または短いクロージャー) 構文を導入することをお勧めします。

PHP 7.4 より前:

PHP 7.4 ではより簡潔な構文が使用できるため、上記の関数は次のように書き換えることができます:

$a = [1, 2, 3, 4, 5];
  $b = array_map(fn($n) => $n * $n * $n, $a);
  print_r($b);
ログイン後にコピー

現在、言語構造により、

匿名関数

(クロージャ) は、以下に示すように、 use を使用して、親スコープで定義された変数を継承できます。

$factor = 10;
  $calc = function($num) use($factor){
    return $num * $factor;
  };
ログイン後にコピー

ただし、PHP 7.4 では、親スコープの値が暗黙的にキャプチャされます (暗黙的に)。値のスコープによって制限されます)。したがって、この関数は 1 行で完了できます:

親スコープで定義された変数はアロー関数に使用できます。これは use の使用と同等であり、親によって変更することはできません。

新しい構文により、より読みやすく保守しやすいコードを構築できるため、言語が大幅に改善されました。

NULL 合体演算子

日常の使用では三項式と isset() が同時に使用される状況が多数あるため、NULL 合体演算子 (? ?) この糖衣構文。変数が存在し、NULL でない場合はそれ自体の値を返し、それ以外の場合は 2 番目のオペランドを返します。

$username = $_GET[&#39;user&#39;] ?? ‘nobody&#39;;
ログイン後にコピー
このコードの動作は非常に単純です。リクエスト パラメータを取得し、存在しない場合はデフォルト値を設定します。しかし、この RFC の例では、変数名が長い場合はどうなるでしょうか?

$this->request->data[&#39;comments&#39;][&#39;user_id&#39;] = $this->request->data[&#39;comments&#39;][&#39;user_id&#39;] ?? &#39;value&#39;;
ログイン後にコピー

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

$this->request->data[&#39;comments&#39;][&#39;user_id&#39;] ??= ‘value’;
ログイン後にコピー

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

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)