搜尋
首頁後端開發PHP8PHP8新特性解讀(開發程式碼實例示範)

本文主要內容為解讀PHP8.0的主要新功能

PHP8新特性解讀(開發程式碼實例示範)## PHP8新特性解讀(開發程式碼實例示範)


  • #1. 聯合類型
  • 2. 匹配表達式
  • 3. null安全運算子
  • #4. 建構子屬性提升
  • ##5 . 註解
  • 6. 命名參數
  • #


    前言

    #PHP8在2020年11月26日正式發布,又一個里程碑到來。

    根據官網的資訊目前已經發佈到了8.0.2版本,但目前許多的項目還是保持在5.6版本,舊的不去新的不來,如有實際需要該升級升級哈!

    接下來喀喀爾將對PHP8.0的新特性進行解析。

    一、給小皮面板下載PHP8

    #既然要學習新特性那總得要先下載下來。

    咔喀本地環境一直使用的是phpstudy,目前PHP版本只給提供到了7.4,。

    開啟PHP官網位址https://www.php.net/,選擇window下載。

    註:以上是自己手動DIY,有些麻煩,為此php中文網開發了一個專為php中文網學習使用的支援php8的整合環境工具,下載網址:https://www.php.cn/xiazai/gongju/1532

    PHP8新特性解讀(開發程式碼實例示範)
    下載方式

    然後點選喀喀爾圈住的這個下載即可

    PHP8新特性解讀(開發程式碼實例示範)
    PHP原始碼下載

    下載到的原始碼就可以直接放到面板的D:\phpstudy_pro\Extensions\php這個目錄下面

    然後隨便給資料夾一個名字,咔咔是按照phpstudy的目錄結構寫的

    PHP8新特性解讀(開發程式碼實例示範)
    PHP目錄結構

    然後跳轉面板的PHP環境,設定為PHP8的環境即可

    PHP8新特性解讀(開發程式碼實例示範)
    設定PHP環境

    造訪一下唄!

    PHP8新特性解讀(開發程式碼實例示範)
    PHP8.0環境設定

    #二、部分下載PHP8會出現502解決方案

    如果你下載完了PHP8,也依照喀喀的流程執行了,但造訪時就是回傳502。

    那麼不用急,這只是一個小問題,如果發現PHP無法運作成功。

    使用cmd來到PHP8的目錄下,執行php -v這個指令,如果出現以下情況就表示喀喀說的這個可以解決,如果不是就另行百度哈!

    出現以下錯誤,原因是VCRUNTIME140.dll與PHP版本不相容

    PHP Warning:  'C:\Windows\SYSTEM32\VCRUNTIME140.dll' 14.0 is not compatible with this PHP build linked with 14.28 in Unknown on line 0

    解決這個問題也是很簡單https://www.yuque.com/u30882/rx39g7/ kns2a2,喀喀爾已經將軟體下載下來了,點擊進去直接下載即可。

    下載完後,就直接開啟安裝,然後重新啟動電腦,萬事大吉。

    如果不使用喀喀爾提供的安裝包,也可以直接存取官網下載。

    官網進去之後,拉到最下邊有個其它工具和框架,點擊咔咔選擇的那個下載即可。

    PHP8新特性解讀(開發程式碼實例示範)
    下載軟體

    # #版本的更新迭代會有新功能的出現,伴隨著某些舊功能也會捨棄。 接下來就聊聊PHP8.0到底帶來了哪些新特性呢!

    1. 聯合類型################關於聯合類型的特性,其實在PHP7的時候已經實現,但是當時是以註解形式。 ######現在看一下倆區別,下圖來自PHP官網。 ###
    PHP8新特性解讀(開發程式碼實例示範)
    PHP8新特性解讀(開發程式碼實例示範)

    PHP8在设置了参数类型后,如果传入类型与预设类型不符合会直接报错

    PHP8新特性解讀(開發程式碼實例示範)
    PHP8新特性解讀(開發程式碼實例示範)
    PHP8新特性解讀(開發程式碼實例示範)
    PHP8新特性解讀(開發程式碼實例示範)

    但是PHP7就不同,虽然预设了类型,但是传入不对应的类型也可执行。

    PHP8新特性解讀(開發程式碼實例示範)
    PHP8新特性解讀(開發程式碼實例示範)

    此功能可以用来限制参数类型,可以更好的对参数进行过滤。

    2. 匹配表达式

    此项功能类似于PHP7的switch语句。

    1. match匹配单值

    相对于switch隐藏了break

    <?php$name = match(2) {    1 => &#39;kaka&#39;,    2 => &#39;niuiniu&#39;,};echo $name;  // niuiniu

    2. 匹配多个条件

    <?php$method = $_SERVER[&#39;REQUEST_METHOD&#39;];match($method) {    &#39;post&#39; => $this->handlePost(),    &#39;get&#39;,&#39;put&#39; =>  $this->handleGet(),};

    3. 默认值

    存在跟switch相同的属性default

    <?php$name = match(3) {    1 => &#39;kaka&#39;,    2 => &#39;niuniu&#39;,    default => &#39;heihei&#39;,};echo $name;  // heihei

    4. 如果不设置默认值会报错

    如果不设置default则会报错

    <?php$name = match(3) {    1 => &#39;kaka&#39;,    2 => &#39;niuniu&#39;,};echo $name;  // Uncaught UnhandledMatchError: Unhandled match value of type int

    5. 强制类型匹配

    默认强制类型匹配,如下代码匹配值为int,但是搜索值为字符串3,所以会直接走default

    <?php$name = match(3) {    1 => &#39;kaka&#39;,    2 => &#39;niuniu&#39;,    "3" => &#39;niuniu&#39;,    default => &#39;zero&#39;,};echo $name;  // zero

    3. null安全运算符

    这个特性会非常高效的解决代码的冗余。

    在PHP7中,有时会存在类属性多条件的判断,如下代码

    <?phpclass Person{    public $user;    public $country;    public function __construct(){        $this->user = $this;        $this->country=&#39;yes&#39;;    }    public function getAddress(){        return $this;    }}$session=new Person();if($session!==null){    $user = $session->user;    if($user!==null){        $address = $user->getAddress();        if($address!=null){            $country = $address->country;            if($country!==null){                var_dump($country);            }        }    }}

    以上代码返回结果为string(3) "yes"

    但是在PHP8中就完美的解决了这种代码冗余的问题

    PHP8新特性解讀(開發程式碼實例示範)
    PHP8新特性解讀(開發程式碼實例示範)

    代码

    <?phpclass Person{    public $user;    public $country;    public function __construct(){        $this->user = $this;        $this->country=&#39;yes&#39;;    }    public function getAddress(){        return $this;    }}$session=new Person();echo $session?->user?->getAddress()?->country;

    同样返回结果也是string(3) "yes"

    可以看到在PHP8中用一行代码即可实现PHP7的7行代码,是不是很nice。

    4. 构造函数属性提升

    PHP7构造函数代码

    <?phpclass User {    public string $kaka;    public function __construct(string $kaka) {        $this->kaka = $kaka;    }}

    PHP8构造函数代码

    <?phpclass User {    public function __construct(public string $kaka;)    {        echo $this->kaka;    }}

    5. 注解

    新增的这个注解特性,咔咔在写了这几个特性之后唯独感觉这个用处不是很大,估计还是很菜的原因。

    但是为了文章的完整性还是写出来给给你们看一下。

    直接上代码了,PHP7获取代码的注释就是用下文代码进行获取的。

    <?phpclass User {    /**     * @api http://www.kaka.com/api     */    function show($name){}}$re=new ReflectionClass(new User);$doc = $re->getMethod(&#39;show&#39;)->getDocComment();$res=substr($doc, strpos($doc, "@api") + strlen("@api "),-2);var_dump($res); // string(32) "http://www.kaka.com/api "

    在上边代码中使用了好几个字符串的操作,假设注释写的不规范,出错的概率不亚于你写代码少个分号。

    既然有这样的问题,那么官方就给咱们解决了这个问题,接下来看一下在PHP8中是怎么写的。

    <?php#[api("http://www.kaka.com/api")]function show($name){}$ref=new ReflectionFunction("show");$attr=$ref->getAttributes("api")[0];$name=$attr->getName();$value=$attr->getArguments();var_dump($value[0]);// string(24) "http://www.kaka1.com/api"

    关于类的注解这里就不说了,有兴趣的可以去官网查阅相关资料。

    6. 命名参数

    最后一点关于PHP8命名参数

    在PHP7使用的都是位置参数,例如如下代码

    也就说你传入的参数是什么在方法接收的地方就对应的是什么。

    <?phpclass User {    public function paramTest ($name,$age)    {        var_dump($name.$age);    }}$user = new User();$user->paramTest(&#39;咔咔&#39;,24); // string(8) "咔咔24"

    那么在PHP8中新增了一项特性就是命名参数,如下代码

    跟上述代码不同的是在方法传参时给每个参数都起了个名字,但是这个名字只能是没有了$ 的参数。

    这个新特性在代码的维护性来看没有一点的优势,咱也不知道设计这个出来干嘛!

    <?phpclass User {    public function paramTest ($name,$age)    {        var_dump($name.$age);// string(8) "24咔咔"    }}$user = new User();$user->paramTest(age: &#39;咔咔&#39;,name: 24);

    但是在参数这块还是有值得点赞的功能,那就是可变参数,类似于Go的切片

    但是在这里一定要注意的一件事情就是,如果使用了可变参数,那么在传参的时候就不能使用位置参数,而需全部使用命名参数。

    <?phpclass User {    public function paramTest ($name,$age,...$other)    {        var_dump($other);        // array(2) { ["sex"]=> int(1) ["like"]=> string(6) "篮球" }    }}$user = new User();$user->paramTest(age: &#39;咔咔&#39;,name: 24,sex:1,like:"篮球");

    四、总结

    以上就是关于PHP8新特性解讀(開發程式碼實例示範)咔咔总结的几个常用点。

    PHP8也添加了新的功能和类库、错误处理、字符串处理、面向对象编程的更改等。

    当然在关注新特性的同时还是需要关注废弃的东西,在PHP8中废弃最多的都是关于反射的几个方法。

    以上就是咔咔总结的PHP8更新的主要特性,没有总结的特别全面,只是把在开发过程中能使用到的写了出来。

    PHP8新特性解讀(開發程式碼實例示範)

    (公眾號原創首發,歡迎關注!)

    堅持學習、堅持寫博、堅持分享是咔咔我從業以來一直所秉持的信念。希望在偌大互聯網中咔咔的文章能帶給你一絲幫助。我是咔咔,下期見。

以上是PHP8新特性解讀(開發程式碼實例示範)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境