關於php7,我們應該知道什麼
阿新 • • 發佈:2020-09-01
php7也出了好幾年,之前一直用的php5,現在專案慢慢地開始全面轉向php7了,所以需要好好看一下php7的一些新的寫法。其實改動的地方也比較多的,我整理了一下,列出了一些比較實用的或者說必須知道的。
一、嚴格模式
php7新增了嚴格模式
declare(strict_types=1);
strict_types的值為1就是開啟了嚴格模式。
如果開啟嚴格模式,那麼其實你在寫程式碼的時候就需要注意了,比如說一個函式:
function addition(int $a,int $b):int { return $a + $b; }
這段程式碼的意思就是引數表明型別的話,那麼必須傳入指定型別的引數,返回值也必須按照指定的返回值來進行返回,否則就會報fatal error型別的錯誤。
二、??三元運算子
php5的寫法:
$a = isset($a) ? $a : '預設值';
php7的寫法:
$a = isset($a) ?? '預設值';
三、太空船運算子
只用一種寫法,可以通吃大於小於等於的比較
$a = 2; $b = 1; print($a <=>$b); //1 $a = 1; $b = 1; print($a <=>$b); //0 $a = 1; $b = 2; print($a <=>$b); //-1
左邊的比右邊的大,返回1,相等返回0 ,左邊的比右邊的小,返回-1
四、將一個閉包函式動態繫結到一個新的物件例項並呼叫執行該函式
class A{ private $x = 10; }
這麼一個類,現在我讓你去獲得它內部的$x的值,怎麼辦?new一下然後去獲取肯定不行(需要public),寫一個類去繼承它,然後獲取也不行(需要protected),只能讓類自己去獲取返回出來。
如果我不在改變類的程式碼的情況下,怎麼動態的去獲取?可以這樣:
$getX = function(){ return $this->$x; }; echo $getX->call(new A); //10
這個其實是動態繫結方法到類的例項物件了,然後自動執行了。
五、use語句
php5這樣寫
use some\namespace\classA;use some\namespace\classB; use some\namespace\classC;
php7這樣寫
use some\namespace\{classA,classB,classC};