①:支持函数的强制参数类型指定,如:
<?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