PHP 7.4新特性


PHP 7.4は2019年11月21日に発表される予定で、主に以下のいくつかの特性を追加しました.
  • 短閉包関数(short closure)
  • プリロードコミット性能
  • 属性タイプ限定
  • Improved type variance(翻訳不可)
  • 三元演算簡写
  • 配列展開演算
  • 新規類のマジック方法:serialization
  • ディジタルセパレータ
  • 演算優先順位
  • は、__toStringにおいて異常
  • を放出することを可能にする.
  • は、反射参照
  • をサポートする.
  • バイト分割関数
  • を追加
  • php短いラベル
  • を除去する.
  • 左関連演算子
  • を破棄
  • 後方互換性のない変更
  • 短いクローズドパッケージ関数
    短い閉包関数は冗長コードを減らすことができます.
    array_map(function (User $user) { 
        return $user->id; 
    }, $users)
    array_map(fn(User $user) => $user->id, $users)

    次の点に注意してください.
  • 短い閉パケットは閉パケット関数の外の変数に直接アクセスできるので、useキーワード
  • を書く必要はありません.
  • fnキーワードで
  • を開始
  • $thisは、通常の閉パッケージのように
  • を用いることができる.
  • 短閉パケットは1行のコードしかなく、戻り宣言としてのみ使用され、returnキーワード
  • の使用は許可されていない.
    より厳格なタイプの方法も使用できます
    $ids = array_map(fn(User $user): int => $user->id, $user);

    プリロードPHPプリロードにより、パフォーマンスが大幅に向上
    利点:PHP 7.4以前にフレームワークを使用して開発した場合、ファイルを要求するたびにロードおよび再コンパイルする必要があります.プリロードは、フレームワークの起動時にメモリにファイルをロードし、後続のリクエストで永続的に有効です.
    欠点:パフォーマンスの向上は他の面で大きなコストを費やし、プリロードされたファイルが変更されるたびにフレームワークを再起動する必要があります.
    属性タイプの制限
    class A
    {
        public string $name;
        
        public Foo $foo;
    }
    PHPはますますJavaなどの強い言語に近づいていると言わざるを得ない.Improved type variance
    コヒーレント戻りタイプ:
    class ParentType {}
    class ChildType extends ParentType {}
    
    class A
    {
        public function covariantReturnTypes(): ParentType
        { /* … */ }
    }
    
    class B extends A
    {
        public function covariantReturnTypes(): ChildType
        { /* … */ }
    }

    依存(よく知っているかどうか):
    class ParentType {}
    class ChildType extends ParentType {}
    
    class A
    {
        public function covariantReturnTypes(): ParentType
        { /* … */ }
    }
    
    class B extends A
    {
        public function covariantReturnTypes(): ChildType
        { /* … */ }
    }

    簡略三元演算子
    現在の> PHP 7以降の書き方:
    $data['date'] = $data['date'] ?? new DateTime();
    PHP 7.4では、次のように書くことができます.
    $data['date'] ??= new DateTime();

    アレイ展開演算
    配列を別の配列に結合し、1次元配列を返します.
    $arrayA = [1, 2, 3];
    
    $arrayB = [4, 5];
    
    $result = [0, ...$arrayA, ...$arrayB, 6 ,7];
    
    // [0, 1, 2, 3, 4, 5, 6, 7]

    注:数値インデックスのみ有効
    新しい種類のマジックの方法RFCは2つの新しいマジックメソッド__serialize__unserializeを追加しました
    数値区切り記号
    下線を使用して、より直感的に数値を分割できます.
    $unformattedNumber = 107925284.88;
    
    $formattedNumber = 107_925_284.88;

    えんざんゆうせんじゅんPHP 7.4の前にこう書いたら
    echo "sum: " . $a + $b;
    PHPは次のように解析されます.
    echo ("sum: " . $a) + $b;
    PHP 8は次のように解析されます.
    echo "sum :" . ($a + $b);
    __toStringからの放出異常
    反射参照のサポートPHP 7.4にはReflectionReference クラスが追加されますphp短いラベルの削除 PHP 8から すると、=

    PHPの な を し けます. えば、

    1 ? 2 : 3 ? 4 : 5;   //     PHP 7.4    ,  PHP 8        
    
    (1 ? 2 : 3) ? 4 : 5; //   

    のない
  • がいない に び すparent::
  • を する.
  • は、var_dumpDateTimeおよびDateTimeImmutable shi'インスタンスを び し、オブジェクト のアクセス な
  • は する.
  • openssl_random_pseudo_bytes は、エラーの び し に
  • を する.
  • シーケンス PDOおよびPDOStatement のインスタンスは、Exception
  • ではなくPDOExceptionを する.
  • get_object_vars()を び してArrayObject を すると、ArrayObject のインスタンスは、ラップ またはオブジェクトの ではなく、
  • の の を す.
    は を けません