1. 程式人生 > 實用技巧 >關於php7,我們應該知道什麼

關於php7,我們應該知道什麼

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};