①:支持函數的強制參數類型指定,如:
<?php
// Coercive mode
function sumOfInts(int ...$ints)
{
return array_sum($ints);
}
var_dump(sumOfInts(2, '3', 4.1)); // int(9)
②:返回類型也在強制進行規定,如:
<?php
function arraysSum(array ...$arrays): array
{
return array_map(function(array $array): int {
return array_sum($array);
}, $arrays);
}
print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));
/*
打印:
Array
(
[0] => 6
[1] => 15
[2] => 24
)
*/
// 強制模式
<php
function foo($a) : int
{
return $a;
}
foo(1.0);
// 嚴格模式
<php
declare(strict_types=1);
function foo($a) : int
{
return $a;
}
foo(1.0);
注:
使用返回值類型聲明時,如果沒有聲明爲嚴格模式,如果返回值不是預期的類型,PHP 還是會對其進行強制類型轉換。但是如果是嚴格模式, 則會出發一個 TypeError 的 Fatal error。
③:比較的時候支持<=> 可以比較字符串,數組,整型,它返回的值有-1,0,1三種,下面看具體代碼:
<?php
// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?>
④:define定義常量不僅僅只支持標量,還支持了數組
<?php
define('ANIMALS', [
'dog',
'cat',
'bird'
]);
echo ANIMALS[1]; // outputs "cat"
?>
⑤:運算符(NULL 合併運算符)
$a = $_GET['a'] ?? 1;
它相當於:
<php
$a = isset($_GET['a']) ? $_GET['a'] : 1;
我們知道三元運算符是可以這樣用的:
$a ?: 1
但是這是建立在 $a 已經定義了的前提上。新增的 ?? 運算符可以簡化判斷。
⑥:成員方法中也可以規定必須要返回某個類類型
<?php
class A {}
class B extends A {}
class C
{
public function test() : A
{
return new A;
}
}
⑦:新建了call方法在外部來調用,更短的方式將匿名函數,追加進對象中且完成調用
<?php
class A {private $x = 1;}
// Pre PHP 7 code
$getXCB = function() {return $this->x;};
$getX = $getXCB->bindTo(new A, 'A'); // intermediate closure
echo $getX();
// PHP 7+ code
$getX = function() {return $this->x;};
echo $getX->call(new A);
/*
打印:
1
1
*/
其他特性,有興趣的可以查看官方文檔:http://php.net/manual/en/migration70.new-features.php