溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP7.0 的新特性

發(fā)布時(shí)間:2020-02-26 01:55:32 來(lái)源:網(wǎng)絡(luò) 閱讀:233 作者:zhangdeTalk 欄目:web開(kāi)發(fā)

PHP7.0 的新特性經(jīng)常會(huì)被面試官問(wèn)到,在平時(shí)的項(xiàng)目開(kāi)發(fā)中運(yùn)用它們也會(huì)提升一定的代碼質(zhì)量和代碼運(yùn)行性能,可見(jiàn)這個(gè)知識(shí)點(diǎn)的重要性。不過(guò)有很多人都沒(méi)有去系統(tǒng)的了解掌握,今天我剛好系統(tǒng)整理了一番分享出來(lái)。

圖片版

PHP7.0 的新特性

文字版

1. 新增了標(biāo)量類型聲明和函數(shù)的返回值類型聲明
例如:
<?php declare(strict_types=1)//1:嚴(yán)格模式 0:強(qiáng)制模式(默認(rèn))
class OrderService extends BaseService
{
   ...
     /**
     * 所有訂單詳情都是通過(guò)這個(gè)入口
     * @param $orderNo
     * @return array|mixed
     * @throws Exception
     */
     public function getOrderDetailByOrderNo(string $orderNo) : array
    {
      $order = $this->model->getByFields(['order_no' => $orderNo]);

      if (empty($order)) {
      return [];
      }
      return (new OrderFactory)->getOrder($order['order_type'])->getOrderDetailByOrderNo($orderNo);
    }
}

2. 太空船運(yùn)算符(組合比較符):<=>
例如:
$c = $a <=> $b
若 $a>$b,則 $c=1
若 $a=$b,則 $c=0
若 $a<$b,則 $c=-1

3. NULL合并運(yùn)算:??
PHP7 之前:$c = isset($b)?$b:0;
PHP7+ :$c = $b??0;

4. 定義常量數(shù)組:define("ARR",[1,2,3])

5. 新增抽象語(yǔ)法樹(shù)AST(高度解耦)
PHP7 之前:PHP 代碼 -> Parser 語(yǔ)法解析 -> OPCODE -> 執(zhí)行
PHP7+ :PHP 代碼 -> Parser 語(yǔ)法解析 -> AST -> OPCODE -> 執(zhí)行

6. 命名空間引用優(yōu)化
PHP7 之前:
use FooLibrary\Bar\Baz\ClassA; 
use FooLibrary\Bar\Baz\ClassB; 
PHP7+:
use FooLibrary\Bar\Baz\{ ClassA, ClassB};

7. 反序列化函數(shù)Unserialize()提供更安全的過(guò)濾特性

8. 新增整除函數(shù)intdiv()
例如:intdiv(10,3)
結(jié)果:3

9. 錯(cuò)誤處理更友好
* 在PHP7+ 中,很多致命錯(cuò)誤以及可恢復(fù)的致命錯(cuò)誤,都被轉(zhuǎn)換為異常來(lái)處理了。 這些異常繼承自 Error 類,此類實(shí)現(xiàn)了 Throwable 接口 (所有異常都實(shí)現(xiàn)了這個(gè)基礎(chǔ)接口)
* PHP7+ 進(jìn)一步方便開(kāi)發(fā)者處理, 讓開(kāi)發(fā)者對(duì)程序的掌控能力更強(qiáng). 因?yàn)樵谀J(rèn)情況下, Error會(huì)直接導(dǎo)致程序中斷, 而PHP7+ 則提供捕獲并且處理的能力, 讓程序繼續(xù)執(zhí)行下去, 為程序員提供更靈活的選擇

10. 新增匿名類
通過(guò)?new class 來(lái)實(shí)例化一個(gè)匿名類,可以用來(lái)替代一些"用后即焚"的完整類定義
例如:
<?php
interface?Logger?{
???public?function?log(string?$msg);
}
class?Application?{
???private?$logger;
???public?function?getLogger():?Logger?{
??????return?$this->logger;
???}
???public?function?setLogger(Logger?$logger)?{
??????$this->logger?=?$logger;
???}??
}
$app?=?new?Application;
//?使用?new?class?創(chuàng)建匿名類
$app->setLogger(new?class?implements?Logger?{
???public?function?log(string?$msg)?{
??????print($msg);
???}
});
$app->getLogger()->log("我的第一條日志");
結(jié)果:我的第一條日志

11. 新增兩個(gè)更安全的偽隨機(jī)生成器函數(shù)random_bytes()和random_int()

12. Closure::call()
有著更好的性能,將一個(gè)閉包函數(shù)動(dòng)態(tài)綁定到一個(gè)新的對(duì)象實(shí)例并調(diào)用執(zhí)行該函數(shù)
例如:
<?php
class?A?{
????private?$x?=?1;
}
//?PHP?7?之前版本定義閉包函數(shù)代碼
$getXCB?=?function()?{
????return?$this->x;
};
//?閉包函數(shù)綁定到類?A?上
$getX?=?$getXCB->bindTo(new?A,?'A');?
echo?$getX();

//?PHP?7+?代碼
$getX?=?function()?{
????return?$this->x;
};
echo?$getX->call(new?A);

13. 移除擴(kuò)展:ereg、mssql、mysql
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI