您好,登錄后才能下訂單哦!
這篇文章主要介紹php7和PHP5對(duì)比有什么區(qū)別,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
php7和PHP5對(duì)比的新特性和性能優(yōu)化
1. 抽象語法樹(AST)
AST在PHP編譯過程作為一個(gè)中間件的角色,替換原來直接從解釋器吐出opcode的方式,讓解釋器(parser)和編譯器(compliler)解耦,可以減少一些Hack代碼,同時(shí),讓實(shí)現(xiàn)更容易理解和可維護(hù)
2. Natice TLS:
線程數(shù)據(jù)共享安全,開啟一個(gè)全局線程用作數(shù)據(jù)共享內(nèi)存空間
3. 指定參數(shù) 返回值類型
4. zval 結(jié)構(gòu)的變化
5. 異常處理
PHP 5 的 try ... catch ... finally 無法處理傳統(tǒng)錯(cuò)誤,如果需要,你通常會(huì)考慮用 set_error_handler() 來 Hack 一下。但是仍有很多錯(cuò)誤類型是 set_error_handler() 捕捉不到的
PHP 7引入 Throwable 接口,錯(cuò)誤及異常都實(shí)現(xiàn)了 Throwable,無法直接實(shí)現(xiàn) Throwable,但可以擴(kuò)展 \Exception 和 \Error 類??梢杂?Throwable 捕捉異常跟錯(cuò)誤。\Exception 是所有PHP及用戶異常的基類;\Error 是所有內(nèi)部PHP錯(cuò)誤的基類。
6. 新的參數(shù)解析方式
7. hashtable變化
buckets、Zvals不再單獨(dú)分配內(nèi)存,消除了很多沒用的冗余。
8、空合并操作符(Null Coalesce Operator)
直接上例子:
$name = $name ?? "NoName"; // 如果$name有值就取其值,否則設(shè)$name成"NoName"
9、飛船操作符(Spaceship Operator)(組合比較操作符)
形式:(expr) <=> (expr)
左邊運(yùn)算對(duì)象小,則返回-1;左、右兩邊運(yùn)算對(duì)象相等,則返回0;左邊運(yùn)算對(duì)象大,則返回1。
$name = ["Simen", "Suzy", "Cook", "Stella"]; usort($name, function ($left, $right) { return $left <=> $right; }); print_r($name);
10、常量數(shù)組(Constant Array)
PHP 7 之前只允許類/接口中使用常量數(shù)組,現(xiàn)在 PHP 7 也支持非類/接口的普通常量數(shù)組了。
define("USER", [ "name" => "Simen", "sex" => "Male", "age" => "38", "skill" => ["PHP", "MySQL", "C"] ]); // USER["skill"][2] = "C/C++"; // PHP Fatal error: Cannot use temporary expression in write context in...
11、統(tǒng)一了變量語法
$goo = [ "bar" => [ "baz" => 100, "cug" => 900 ] ]; $foo = "goo"; $$foo["bar"]["baz"]; // 實(shí)際為:($$foo)['bar']['baz']; PHP 5 中為:${$foo['bar']['baz']}; // PHP 7 中一個(gè)籠統(tǒng)的判定規(guī)則是,由左向右結(jié)合。
12、Throwable 接口
這是 PHP 7 引進(jìn)的一個(gè)值得期待的新特性,將極大增強(qiáng) PHP 錯(cuò)誤處理能力。PHP 5 的 try ... catch ... finally 無法處理傳統(tǒng)錯(cuò)誤,如果需要,你通常會(huì)考慮用 set_error_handler() 來 Hack 一下。但是仍有很多錯(cuò)誤類型是 set_error_handler() 捕捉不到的。PHP 7引入 Throwable 接口,錯(cuò)誤及異常都實(shí)現(xiàn)了 Throwable,無法直接實(shí)現(xiàn) Throwable,但可以擴(kuò)展 \Exception 和 \Error 類。可以用 Throwable 捕捉異常跟錯(cuò)誤。\Exception 是所有PHP及用戶異常的基類;\Error 是所有內(nèi)部PHP錯(cuò)誤的基類。
$name = "Tony"; try { $name = $name->method(); } catch (\Error $e) { echo "出錯(cuò)消息 --- ", $e->getMessage(), PHP_EOL; } try { $name = $name->method(); } catch (\Throwable $e) { echo "出錯(cuò)消息 --- ", $e->getMessage(), PHP_EOL; } try { intp(5, 0); } catch (\pisionByZeroError $e) { echo "出錯(cuò)消息 --- ", $e->getMessage(), PHP_EOL; }
13、use 組合聲明
use 組合聲明可以減少 use 的輸入冗余。
use PHPGoodTaste\Utils\{ Util, Form, Form\Validation, Form\Binding };
14、一次捕捉多種類型的異常 / 錯(cuò)誤
PHP 7.1 新添加了捕獲多種異常/錯(cuò)誤類型的語法——通過豎杠“|”來實(shí)現(xiàn)。
try { throw new LengthException("LengthException"); // throw new pisionByZeroError("pisionByZeroError"); // throw new Exception("Exception"); } catch (\pisionByZeroError | \LengthException $e) { echo "出錯(cuò)消息 --- ", $e->getMessage(), PHP_EOL; } catch (\Exception $e) { echo "出錯(cuò)消息 --- ", $e->getMessage(), PHP_EOL; } finally { // ... }
15、可見性修飾符的變化
PHP 7.1 之前的類常量是不允許添加可見性修飾符的,此時(shí)類常量可見性相當(dāng)于 public。PHP 7.1 為類常量添加了可見性修飾符支持特性。總的來說,可見性修飾符使用范圍如下所示:
函數(shù)/方法:public、private、protected、abstract、final
類:abstract、final
屬性/變量:public、private、protected
類常量:public、private、protected
class YourClass { const THE_OLD_STYLE_CONST = "One"; public const THE_PUBLIC_CONST = "Two"; private const THE_PRIVATE_CONST = "Three"; protected const THE_PROTECTED_CONST = "Four"; }
iterable 偽類型
PHP 7.1 引入了 iterable 偽類型。iterable 類型適用于數(shù)組、生成器以及實(shí)現(xiàn)了 Traversable 的對(duì)象,它是 PHP 中保留類名。
$fn = function (iterable $it) : iterable { $result = []; foreach ($it as $value) { $result[] = $value + 1000; } return $result; }; $fn([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
可空類型(Nullable Type)
PHP 7.1 引入了可空類型??纯葱屡d的 Kotlin 編程語言的一個(gè)噱頭特性就是可空類型。PHP 越來越像“強(qiáng)類型語言了”。對(duì)于同一類型的強(qiáng)制要求,可以設(shè)置其是否可空。
$fn = function (?int $in) { return $in ?? "NULL"; }; $fn(null); $fn(5); $fn(); // TypeError: Too few arguments to function {closure}(), 0 passed in ...
Void 返回類型
PHP 7.1 引入了 Void 返回類型。
function first(): void { // ... } function second(): void { // ... return; }
以上是“php7和PHP5對(duì)比有什么區(qū)別”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。