PHP 7新特性

13925 ワード

PHPスカラータイプと戻り値タイプ宣言
デフォルトでは、すべてのPHPファイルは弱いタイプのチェックモードです.
PHP 7はスカラータイプ宣言の特性を追加し、スカラータイプ宣言には2つのモードがあります.
  • 強制モード(デフォルト)
  • 厳格モード
  • declare(strict_types=1);
    コードにstrict_を指定するtypesの値(1または0)、1は厳格なタイプの検査モードを表し、関数呼び出しと戻り文に作用する.0表弱型検査モードを示す
    使用できるタイプのパラメータは次のとおりです.
  • int
  • float
  • bool
  • string
  • interfaces
  • array
  • callable
  • php 
    //      
    function sum(int ...$ints) 
    { 
       return array_sum($ints); 
    } 
    
    print(sum(2, '3', 4.1)); 
    ?>
    
    //9
    
    php 
    //      
    declare(strict_types=1); 
    
    function sum(int ...$ints) 
    { 
       return array_sum($ints); 
    } 
    
    print(sum(2, '3', 4.1)); 
    ?>
    
    //PHP Fatal error:  Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in……

    PHP 7は、戻りタイプ宣言のサポートを追加し、戻りタイプ宣言は関数の戻り値のタイプを示します.
    宣言できる戻りタイプは次のとおりです.
  • int
  • float
  • bool
  • string
  • interfaces
  • array
  • callable
  • php 
    declare(strict_types=1); 
    
    function returnIntValue(int $value): int 
    { 
       return $value; 
    } 
    
    print(returnIntValue(5)); 
    ?>

    新しい戻り値タイプvoidが導入された.戻り値をvoidタイプとして宣言する方法は、return文を省略するか、空のreturn文を使用します.void関数ではNULLは正当な戻り値ではありません
    返されるタイプにはvoidもあり、返されるタイプをvoidと定義する関数には戻り値がなくnullを返してもだめです
    void関数はreturn文を省略したり、空のreturn文を使用したりすることができます.
     
    PHP NULL連結演算子
    PHP 7に新たに追加されたNULL連結演算子(?)isset()検出を実行するための三元演算のショートカットです
    NULL連結演算子は、変数が存在し、値がNULLではないかどうかを判断します.そうであれば、自身の値を返します.そうでなければ、2番目のオペランドを返します.
    $site = isset($_GET['site']) ? $_GET['site'] :'python';
    
    ==>
    
    $site = isset($_GET['site']) ?? 'python';

     
    PHP宇宙船演算子(コンボ比較子)
    PHP 7で新しく追加された宇宙船演算子(コンビネーション比較子)は、2つの式$aと$bを比較するために使用され、$aが$bより小さい、等しい、またはそれより大きい場合、それぞれ-1、0または1を返します.
    php
    print(1<=>1);
    print(1<=>2);
    print(2<=>1);
    ?>
    
    //0 -1 1

     
    PHP定数配列
    PHP 5.6ではconstで定数配列のみを定義でき、PHP 7はdefine()で定義できる
    php
    define('sites', [
        'Google',
        'Runoob',
        'Taobao'
    ]);
    
    ?>

     
    PHP匿名類
    PHP 7は、new classによって匿名クラスをインスタンス化することをサポートし、これはいくつかの「使用後焼却」の完全なクラス定義に代わることができる.
     
    PHP Closure::call()
    PHP 7のClosure::call()は、閉パッケージ関数を新しいオブジェクトインスタンスに動的にバインドし、その関数の実行を呼び出すより良いパフォーマンスを持っています.
    php
    class A {
        private $x = 1;
    }
    
    //PHP7            
    $getXCB = function() {
        return $this->x;
    };
    
    //        A 
    $getX = $getXCB->bindTo(new A, 'A');
    
    echo $getX();
    print(PHP_EOL);
    
    //PHP 7+   
    $getX = function() {
        return $this->x;
    };
    echo $getX->call(new A);
    ?>
    //    
    php
    function callback($callback) {
        $callback();
    }
    
    $var = '   ';
    
    callback(function() use (&$var){
        echo "         {$var}";
        $var = 1;
    });
    print($var);
    ?>

     
     
    PHPろ過
    PHP 7はunserialize()にフィルタを提供できる特性を追加し、不正なデータのコード注入を防止し、より安全な逆シーケンス化データを提供する
    php
    class MyClass1 {
        public $obj1prop;
    }
    
    class MyClass2 {
        public $obj2prop;
    }
    
    $obj1 = new MyClass1();
    $obj1->obj1prop = 1;
    $obj2 = new MyClass2();
    $obj2->obj2prop = 2;
    
    $serializedObj1 = serialize($obj1);
    $serializedObj2 = serialize($obj2);
    
    //          ,         
    //  allowed_classes    false,unserialize         __PHP_Incomplete_Class  
    $data = unserialize($serializedObj1, ["allowed_classes"=>true]);
    
    //       __PHP_Incomplete_Class  
    $data2 = unserialize($serializedObj2, ["allowed_classes"=>["MyClass1", "MyClass2"]]);
    print($data->obj1prop);
    echo "
    "; print($data2->obj2prop); ?>

     
    PHP IntlChar()
    PHP CSPRNG
    CSPRNG(Cryptographically Secure Pseudo-Landom Number Generator、擬似乱数発生器).
    PHP 7は、いくつかのCSPRNG関数を導入することによって、暗号学的に強い乱数を生成する簡単な機構を提供する.
  • random_bytes()-保護された擬似ランダム文字列を暗号化して生存します.
  • random_int()-保護された擬似ランダム整数を暗号化して生存する.
  • php
    //string random_bytes(int $length)
    //@param  length-           
    //@return         ,    int             
    
    $bytes = random_bytes(5);
    //print($bytes);
    print(bin2hex($bytes));
    
    //int random_int (int $min, int $max)
    //@param min       ,        PHP_INT_MIN
    //@param max       ,        PHP_INT_MAX
    //@return           int   
    
    print(random_int(100, 999));
    print(random_int(-1000, 0));
    ?>

     
     
    PHP 7異常
     
     
    PHP 7 use文
    PHP 7は、同じnamespaceから同じuseを使用してクラス、関数、定数をインポートできます.
     
    PHP 7エラー処理
    PHP 7は多くのエラーの報告方式を変更した.PHP 5の従来のエラー報告機構とは異なり,現在では多くのエラーがError異常として投げ出されている.
    このError異常は、通常の異常のようにtry/catchブロックによって捕捉され得る.一致するtry/catchブロックがない場合は、set_exception_handler()によって登録された例外処理関数を呼び出して処理します.例外処理関数が登録されていない場合は、従来の方法で処理されます.Fatal Errorとして報告されます.
    ErrorクラスはExceptionクラスから拡張されたわけではないので、catch(Exception$e){...}このようなコードはErrorをキャプチャできない.catch(Error$e){...}このようなコードは、異常処理関数(set_exception_handler()を登録することによって、Errorをキャプチャする.
    php
    class MathOperations
    {
        protected $n = 10;
    
        //     ,   0,    
        public function doOperation(): string
        {
            try
            {
                $value = $this->n % 0;
                return $value;
            } catch (DivisionByZeroError $e)
            {
                return $e->getMessage();
            }
        }
    }
    
    $mathOperationsObj = new MathOperations();
    print($mathOperationsObj->doOperation());
    ?>

     
     
    PHP 7 intdiv()関数
    PHP 7はintdiv()関数を新たに追加し、2つのパラメータを受信し、戻り値は第1のパラメータが第2のパラメータを除いた値であり、整列する.
     
    PHP 7 Sessionオプション
    PHP 7廃棄特性
    PHP 7除去の拡張
    PHP 7が移動したSAPI