ホームページ >バックエンド開発 >PHP7 >php7の新機能を見てみましょう

php7の新機能を見てみましょう

coldplay.xixi
coldplay.xixi転載
2020-06-22 17:42:463513ブラウズ

php7の新機能を見てみましょう

1. PHP スカラー型と戻り値の型宣言

2. PHP NULL 合体演算子

3. PHP 宇宙船操作演算子 (組み合わせ比較演算子)

4、PHP 定数配列

5、PHP 匿名クラス

6、PHP Closure::call()

7 、PHPフィルター unserialize()

8、PHP IntlChar()

9、PHP CSPRNG

10、PHP 7 例外

11、PHP 7 use ステートメント

12、PHP 7 エラー処理

13、PHP intp() 関数

14、PHP 7 セッション オプション

15、PHP 7 の非推奨の機能

16. PHP 7 で削除された拡張機能

##17. PHP 7 で削除された SAPI

#PHP スカラー型と戻り値の型宣言

    スカラー型宣言
  • 強制モード

    ##

    declare(strict_types=1)
      ecb704628f0d1ba7498867870ef3bec0
    
    以上程序执行输出结果为:
    
    9复制代码
    厳密モー​​ド
  • #

    43ec82d44a534e8fd5e8416c4719c4dd
    以上程序由于采用了严格模式,所以如果参数中出现不适整数的类型会报错,执行输出结果为:
    
    PHP Fatal error:  Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in……复制代码
    PHP NULL 合体演算子
##前の三項演算

# #
  $site = isset($_GET['site']) ? $_GET['site'] : '菜鸟教程';复制代码
  • #現在のマージ演算子

  $site = $_GET['site'] ?? '菜鸟教程';复制代码
    #上記の 2 つのメソッドは同じです
  • 次に例を示します。
  •     937b551757918eaa8d4bc2575cf4f5cc复制代码

    結合比較演算子 (別名 spaceship 演算子)

  • PHP 7 で新たに追加された spaceship 演算子 (結合比較演算子) は、2 つの式 $ を比較するために使用されます。 a と $b。$a が $b より小さい場合、$b より大きい場合、または $b より大きい場合は、それぞれ -1、0、または 1 を返します。

以下は例です

838d2955445a31c5bbdfb717d04cb05d 1);print(PHP_EOL);print( 1 96b4fef55684b9312718d5de63fb7121 2);print(PHP_EOL);print( 2 96b4fef55684b9312718d5de63fb7121 1);print(PHP_EOL);print(PHP_EOL); // PHP_EOL 为换行符

// 浮点型比较print( 1.5 96b4fef55684b9312718d5de63fb7121 1.5);print(PHP_EOL);print( 1.5 96b4fef55684b9312718d5de63fb7121 2.5);print(PHP_EOL);print( 2.5 96b4fef55684b9312718d5de63fb7121 1.5);print(PHP_EOL);print(PHP_EOL);

// 字符串比较print( "a" 96b4fef55684b9312718d5de63fb7121 "a");print(PHP_EOL);print( "a" 96b4fef55684b9312718d5de63fb7121 "b");print(PHP_EOL);print( "b" 96b4fef55684b9312718d5de63fb7121 "a");print(PHP_EOL);
?>复制代码
    以上结果分别为复制代码
0
-1
1

0
-1
1

0
-1
1复制代码
PHP 定数配列

以前に定義された定数配列には # のみを含めることができます## const

;

次に、定数配列を定義するには、
    define()
  • ;

    を使用します。
  • 以下は例です:
  • // 使用 define 函数来定义数组
    define('sites', [   'Google',   'Runoob',   'Taobao']);print(sites[1]);
    ?>
    以上程序执行输出结果为:
    
    Runoob复制代码
    PHP 匿名クラス
PHP 7 では、新しいクラスによる匿名クラスのインスタンス化がサポートされており、これを置き換えることができます。いくつかの「すぐに使用する」 「書き込み」の完全なクラス定義。

以下は例です:

            f59462b884d1e29413c7c5dcd5e665d5logger; 
               } 
            
               public function setLogger(Logger $logger) { 
                  $this->logger = $logger; 
               }   
            } 
            
            $app = new Application; 
            // 使用 new class 创建匿名类 
            $app->setLogger(new class implements Logger { 
               public function log(string $msg) { 
                  print($msg); 
               } 
            }); 
    
            $app->getLogger()->log("我的第一条日志"); 
            ?>
    以上程序执行输出结果为:
    
    我的第一条日志复制代码
  • php Closure::call()

  • PHP 7

    Closure::call()

    はパフォーマンスが向上し、クロージャー関数を新しいオブジェクト インスタンスに動的にバインドし、その関数を呼び出します。
  • 实例
    c887e2e2c47091b63aac6293b2ac837dx; 
    }; 
    
    // 闭包函数绑定到类 A 上 
    $getX = $getXCB->bindTo(new A, 'A');  
    
    echo $getX(); 
    print(PHP_EOL); 
    
    // PHP 7+ 代码 
    $getX = function() { 
        return $this->x; 
    }; 
    echo $getX->call(new A); 
    ?>
    以上程序执行输出结果为:
    1
    1复制代码

    PHP フィルター unserialize()
    • 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 对象,除了 MyClass1 和 MyClass2 
    $data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]); 
    
    print($data->obj1prop); 
    print(PHP_EOL); 
    print($data2->obj2prop); 
    ?>
    以上程序执行输出结果为:
    1
    2复制代码

    • 上記の機能は

      unserialize() であることに注意してください。追加のパラメーター選択がある allowed_classes

    PHP CSPRNG 擬似乱数ジェネレーター

    CSPRNG (Cryptographically Secure Pseudo-Random Number Generator、擬似乱数ジェネレーター)。

    PHP 7 は、いくつかの CSPRNG 関数を導入することにより、暗号的に強力な乱数を生成するためのシンプルなメカニズムを提供します。

    • random_bytes() - 暗号的に保護された擬似ランダム文字列。

    • random_int() - 暗号的に保護された擬似乱数整数。

    要約すると、これは元の

    rand()
    および 'mt_rand()' と似ていますが、random_bytes() がランダムな文字列を生成する点が異なります。

    php7 例外
    • PHP 7 の例外は、古い assert()

      関数の下位互換性と拡張のために使用されます。これにより、運用環境でゼロコストのアサーションが可能になり、カスタム例外やエラーをスローする機能が提供されます。

    API の古いバージョンは、互換性を確保するために引き続き維持されます。
    • assert() は、評価対象の文字列やテスト対象のブール値だけでなく、最初の引数を式にすることができる言語構造になりました。

    assert()的应用  跟assert_option() 配合复制代码
  • パラメータの種類もあります

  • 設定項目

  • デフォルト値

    オプション値

    0. コードを生成しますが、実行中はスキップします-1. コードを生成しません (運用環境)
    **参数**
    assertion
    断言。在 PHP 5 中,是一个用于执行的字符串或者用于测试的布尔值。在 PHP 7 中,可以是一个返回任何值的表达式, 它将被执行结果用于指明断言是否成功。
    description
    如果 assertion 失败了,选项 description 将会包括在失败信息里。
    exception
    在 PHP 7 中,第二个参数可以是一个 Throwable 对象,而不是一个字符串,如果断言失败且启用了 assert.exception 该对象将被抛出
    
    实例
    将 zend.assertions 设置为 0:
    实例
    <?php 
    ini_set(&#39;zend.assertions&#39;, 0); 
    
    assert(true == false); 
    echo &#39;Hi!&#39;; 
    ?>
    以上程序执行输出结果为:
    Hi!
    将 zend.assertions 设置为 1,assert.exception 设置为 1:
    实例
    <?php 
    ini_set(&#39;zend.assertions&#39;, 1); 
    ini_set(&#39;assert.exception&#39;, 1); 
    
    assert(true == false); 
    echo &#39;Hi!&#39;; 
    ?>
    以上程序执行输出结果为:
    Fatal error: Uncaught AssertionError: assert(true == false) in -:2
    Stack trace:#0 -(2): assert(false, &#39;assert(true == ...&#39;)#1 {main}
      thrown in - on line 2复制代码

    PHP 7 use 语句

    • PHP 7 可以使用一个 use 从同一个 namespace 中导入类、函数和常量:

    // PHP 7 之前版本需要使用多次 use 
    use some\namespace\ClassA; 
    use some\namespace\ClassB; 
    use some\namespace\ClassC as C; 
    use function some\namespace\fn_a; 
    use function some\namespace\fn_b; 
    use function some\namespace\fn_c; 
    use const some\namespace\ConstA; 
    use const some\namespace\ConstB; 
    use const some\namespace\ConstC; 
    // PHP 7+ 之后版本可以使用一个 use 导入同一个 namespace 的类 
    use some\namespace\{ClassA, ClassB, ClassC as C}; 
    use function some\namespace\{fn_a, fn_b, fn_c}; 
    use const some\namespace\{ConstA, ConstB, ConstC}; 
    ?>

    推荐教程:《php教程

    #zend.assertions 1 1. コードの生成と実行 (開発モード)
    assert.Exception 0 1. アサーションが失敗した場合にスローされる、例外オブジェクトがスローされる可能性があります。例外が提供されない場合は、AssertionError オブジェクト インスタンスがスローされます。
    0 . Throwable を使用または生成します。オブジェクトをスローするのではなく、オブジェクトに基づいて警告を生成するだけです (PHP 5 と互換性があります)

    以上がphp7の新機能を見てみましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。