参数以及返回值的类型现在可以通过在类型前加上一个问号使之允许为空。当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null。
<?PHP
function testReturn (): ?string
{return 'elePHPant';}
var_dump (testReturn ());
function testReturn (): ?string
{return null;}
var_dump (testReturn ());
function test (?string $name)
{var_dump ($name);
}
test ('elePHPant');
test (null);
test ();
一个新的返回值类型 void 被引入。返回值声明为 void 类型的方法要么干脆省去 return 语句,要么使用一个空的 return 语句。对于 void 函数来说,NULL 不是一个合法的返回值。
<?PHP
function swap (&$left, &$right) : void
{if ($left === $right) {return;}
$tmp = $left;
$left = $right;
$right = $tmp;
}
$a = 1;
$b = 2;
var_dump (swap ($a, $b), $a, $b);
试图去获取一个 void 方法的返回值会得到 NULL,并且不会产生任何警告。这么做的原因是不想影响更高层次的方法。
短数组语法([])现在作为 list () 语法的一个备选项,可以用于将数组的值赋给一些变量(包括在 foreach 中)。
<?PHP
$data = [[1, 'Tom'],
[2, 'Fred'],
];
// list () style
list ($id1, $name1) = $data [0];
// [] style
[$id1, $name1] = $data [0];
// list () style
foreach ($data as list ($id, $name)) {// logic here with $id and $name}
// [] style
foreach ($data as [$id, $name]) {// logic here with $id and $name}
现在起支持设置类常量的可见性。
<?PHP
class ConstDemo
{
const PUBLIC_CONST_A = 1;
public const PUBLIC_CONST_B = 2;
protected const PROTECTED_CONST = 3;
private const PRIVATE_CONST = 4;
}
一个 catch 语句块现在可以通过管道字符 (|) 来实现多个异常的捕获。这对于需要同时处理来自不同类的不同异常时很有用。
<?PHP
try {// some code} catch (FirstException | SecondException $e) {// handle first and second exceptions}
现在 list () 和它的新的 [] 语法支持在它内部去指定键名。这意味着它可以将任意类型的数组 都赋值给一些变量(与短数组语法类似)
<?PHP
$data = [["id" => 1, "name" => 'Tom'],
["id" => 2, "name" => 'Fred'],
];
// list () style
list ("id" => $id1, "name" => $name1) = $data [0];
// [] style
["id" => $id1, "name" => $name1] = $data [0];
// list () style
foreach ($data as list ("id" => $id, "name" => $name)) {// logic here with $id and $name}
// [] style
foreach ($data as ["id" => $id, "name" => $name]) {// logic here with $id and $name}
<?PHP
var_dump ("abcdef"[-2]);
var_dump (strpos ("aabbcc", "b", -3));