本文為大家帶來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 = '') { 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 = 'b';$str = match($key) { 'a' => '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中文網其他相關文章!