PHP7.0

PHP7.0

新特性

标量类型声明

增加了函数参数的类型,截止到现在PHP可以指定如下类型:

  • string (字符串)
  • int (整形)
  • float(浮点数)
  • bool(布尔值)
  • array(数组)
  • className (自定义类型)
  • interfaceName (自定义接口名)
  • callable (回调类型)

[运行代码]

// Coercive mode
function sumOfInts(int ...$ints)
{
    return array_sum($ints);
}
var_dump(sumOfInts(2, '3', 4.1));

[执行结果]

int(9)

返回值类型

PHP 7 增加了对返回类型声明的支持,可以明确指定返回值的类型。

[运行代码]

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
)


通过 define() 定义常量数组

PHP5.6 已经可以给类常量定义数组了,PHP7更近一步,可以使用define定义全局的常量。

[运行代码]

define('ANIMALS', [
    'dog',
    'cat',
    'bird'
]);

echo ANIMALS[1]; // 输出 "cat"

[执行结果]

cat

错误处理

PHP 7 改变了大多数错误的报告方式。不同于传统(PHP 5)的错误报告机制,现在大多数错误被作为 Error 异常抛出。

[运行代码]

try{
    // 可以是PHP语法错误
    some_error();
}catch(\Throwable $ex){
    echo "catched:\n";
    echo $ex->getMessage();
}

[执行结果]

catched:
Call to undefined function some_error()

这种 Error 异常可以像 Exception 异常一样被第一个匹配的 try / catch 块所捕获。如果没有匹配的 catch 块,则调用异常处理函数(事先通过 set_exception_handler() 注册)进行处理。 如果尚未注册异常处理函数,则按照传统方式处理:被报告为一个致命错误(Fatal Error)。

Error 类并非继承自 Exception 类,所以不能用 catch (Exception $e) { ... } 来捕获 Error。你可以用 catch (Error $e) { ... },或者通过注册异常处理函数( set_exception_handler())来捕获 Error。

或者使用 catch (Throwable $e) { ... } 来捕获错误或者异常

http://php.net/manual/zh/language.errors.php7.php

其他

[运行代码]

try{
    // 可以是PHP语法错误
    some_error();
}catch(\Throwable $ex){
    echo "catched:\n";
    echo $ex->getMessage();
}

[执行结果]

catched:
Call to undefined function some_error()

参见

参考链接