PHP5.6 PHP 7.0との違いについて


両者の区別
  • PHP7.0比PHP 5.6パフォーマンスが2倍に向上しました.
  • PHP7.0は64ビットを完全にサポートします.
  • PHP7.0以前に発生した致命的なエラーは、すべて異常を投げ出すように変更されました.
  • 空結合オペレータ(?)が追加されました.効果は三元演算子に相当します.
  • PHP7.0関数の戻りタイプ宣言が追加されました.
  • PHP7.0スカラータイプ宣言が追加されました.PHP 7の関数のパラメータタイプ宣言は、スカラーであってもよい.PHP 5ではクラス名、インタフェース、arrayまたはcallable(PHP 5.4、すなわち匿名関数を含む関数)のみが使用でき、string、int、float、boolも使用できるようになった.
  • に匿名クラスが追加されました.

  • PHP 5.3から匿名関数があり、現在また匿名クラスが追加された.
  • PHP7.0以降のオーバーフローは、サポートされていない古いSAPI(サーバ側アプリケーションプログラミングポート)と拡張を除きます.
  • defineは定数配列を定義することができる.

  • PHPスカラータイプ
    #        ,          
    declare(strict_types=1)
    #1          ,            ;0         。
    

    タイプ宣言を返す
    PHP 7は、返却タイプ宣言のサポートを追加しました.パラメータタイプ宣言と同様に、戻りタイプ宣言は関数の戻り値のタイプを示します.
    
    
    function arraysSum(array ...$arrays): array
    {
        return array_map(function(array $array): int {
            return array_sum($array);
        }, $arrays);
    }
    
    print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));
    

    NULL連結演算子
    変数が存在し、値がNULLでない場合は、自身の値が返されます.そうでない場合は、2番目のオペランドが返されます.
    $site = isset($_GET['site']) ? $_GET['site'] : 'wo';
    #   
    $site = $_GET['site'] ??'wo';
    

    スペースボートオペレータ
    スペースボートオペレータは、2つの式を比較するために使用されます.aがaより小さい、等しい、またはそれより大きい、aより小さい、等しい、またはbより大きい場合、それはそれぞれ−1、0または1を返す.
    
    //   
    echo 1 <=> 1; // 0
    echo 1 <=> 2; // -1
    echo 2 <=> 1; // 1
    
    //    
    echo 1.5 <=> 1.5; // 0
    echo 1.5 <=> 2.5; // -1
    echo 2.5 <=> 1.5; // 1
     
    //    
    echo "a" <=> "a"; // 0
    echo "a" <=> "b"; // -1
    echo "b" <=> "a"; // 1
    ?>
    

    定数配列をdefine()で定義する
    *define()を使用して定数配列を定義する
    
    define('ANIMALS', [
        'dog',
        'cat',
        'bird'
    ]);
    
    echo ANIMALS[1]; //    "cat"
    ?>
    

    define()を使用して定数を定義するには
    
    define("CONSTANT", "Hello world.");
    echo CONSTANT; // outputs "Hello world."
    ?>
    

    キーワードconstを使用して定数を定義する
    
    const CONSTANT = 'Hello World';
    
    echo CONSTANT;
    ?>
    

    匿名クラス
    PHP 7は、new classを介して匿名クラスをインスタンス化することをサポートし、これは、いくつかの「使用後焼却」の完全なクラス定義に代わることができる.
    
    interface Logger {
        public function log(string $msg);
    }
    
    class Application {
        private $logger;
    
        public function getLogger(): Logger {
             return $this->logger;
        }
    
        public function setLogger(Logger $logger) {
             $this->logger = $logger;
        }
    }
    
    $app = new Application;
    $app->setLogger(new class implements Logger {
        public function log(string $msg) {
            echo $msg;
        }
    });
    
    var_dump($app->getLogger());
    ?>
    

    出力:
    object(class@anonymous)#2 (0) {
    }
    

    リファレンス
  • 新特性