首頁  >  文章  >  後端開發  >  結合範例講解PHP8的新特性

結合範例講解PHP8的新特性

藏色散人
藏色散人轉載
2021-12-02 14:14:153477瀏覽

本文為大家帶來PHP8 新功能解讀與範例,並希望與需要的朋友有所幫助!

PHP8.0 新特性解讀與範例

#新增命名參數功能

啥是命名參數?
就是具名參數,在呼叫函數的時候,可以指定參數名稱,指定參數名稱後,參數順序可以不安裝原函數參數順序傳.

範例:

  <?php      /**
       * 计算余额方法
       * @param $amount 账户金额
       * @param $payment 支出金额
       * @return $balance = $amount-$payment 余额
       */
      function balance($amount, $payment)
      {
          return $amount - $payment;
      }
      //传统方式调用
      balance(100, 20);
      //php8 使用命名参数调用
      balance(amount: 100, payment: 20);
      //也可以换个顺序,这样来
      balance(payment: 20, amount: 100);

註解功能

啥是註解?直接上程式碼,最後在解釋

範例:

#[Attribute]class PrintSomeThing{
  public function __construct($str = &#39;&#39;)
  {
     echo sprintf("打印字符串 %s \n", $str);
  }}#[PrintSomeThing("hello world")]class AnotherThing{}// 使用反射读取住解$reflectionClass = new ReflectionClass(AnotherThing::class);$attributes = $reflectionClass->getAttributes();foreach($attributes as $attribute) {
  $attribute->newInstance(); //获取注解实例的时候,会输出 ‘打印字符串 Hello world’}

註解功能個人理解總結,使用註解可以將類別定義成一個低解耦,高內聚的元數據類。在使用的時候透過註解靈活引入,反射註解類別實例的時候達到呼叫的目的。
**註解類別只有在被實例化的時候才會呼叫

#建構子屬性提升

啥意思呢,就是在建構函式中可以宣告類別屬性的修飾詞作用域
例子:

<?php
    // php8之前
    class User
    {
        protected string $name;
        protected int $age;
        public function __construct(string $name, int $age)
        {
            $this->name = $name;
            $this->age = $age;
        }
    }
    //php8写法,
    class User
    {
        public function __construct(
            protected string $name,
            protected int $age
        ) {}
    }

節約了程式碼量,不用單獨宣告類別屬性了。

聯合類型

在不確定參數類型的場景下,可以使用.

範例:

    function printSomeThing(string|int $value)
    {
        var_dump($value);
    }

Match表達式

和switch cash差不多,不過是嚴格===符合

範例:

<?php$key = &#39;b&#39;;$str = match($key) {
    &#39;a&#39; => 'this a',
    'c' => 'this c',
     0  => 'this 0',
    'b' => 'last b',};echo $str;//输出 last b

新增Nullsafe 運算子

<?php
   class User
   {
       public function __construct(private string $name)
       {
           //啥也不干
       }
       public function getName()
       {
           return $this->name;
       }
    }
    //不实例 User 类,设置为null
    $user = null;
   echo $user->getName();//php8之前调用,报错
   echo $user?->getName();//php8调用,不报错,返回空

簡化了is_null 判斷

推薦學習:《PHP影片教學

以上是結合範例講解PHP8的新特性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除