1.标量类型声明
PHP是一种弱类型的编程语言,因此没有提供任何方法来指定输入参数和返回值的类型,PHP7突破了这种现状,增加了对标量类型(int,float,string,bool)的声明支持,增加declare(strict_types=1)指令声明是否严格类型校验,来看一段代码:
declare(strict_types=1)
function add(int $x, int $y) : int
{
return $x+ $y;
}
echo add(1, 2); //int(7)
有效的类型有:class/interfacename, self, array, callable, bool, float, int and string.
2. ?? ——NULL合并运算符
PHP7中添加了NULL合并运算符,不要小看这个“??”,有了它我们就能很方便的获取一个参数,并能在其为空的情况下提供一个默认值。如何??运算符左侧值存在并且不为NULL,则返回左侧,否则将返回其右侧值。
// 获取user参数的值(如果为空,则用'nobody')
// PHP5中我们这样来实现:
$username = isset($_GET['user']) ? $_GET['user'] :'nobody';
// PHP7中,使用??运算符更便捷:
$username = $_GET['user'] ?? 'nobody';
?>
3.匿名类
匿名类顾名思义没有类名称,其声明和实例化是同时的,PHP7 支持通过 new class 来实例化一个匿名类,可以用来替代一些"用后即焚"的完整类定义。
echo (new class() {
publicfunction myMethod() {
return"Hello!";
}
})->myMethod();
//Result: Hello!
4.定义数组常量
define('MYCONSTANT', array('a','b','c'));
5.结合比较运算符(<=>)
用于比较两个表达式。当$a 大于、等于或小于$b 时它分别返回1、0或-1
// PHP 7之前的写法:比较两个数的大小
function func ( $ a , $ b ) {
return ($a < $b) ? -1 : (($a > $b) ? 1 : 0);
}
// PHP新增的操作符 <=>
function func ( $ a , $ b ) {
return $a <=> $b;
}
6.一次捕捉多种类型的异常 / 错误
PHP 7.1 新添加了捕获多种异常/错误类型的语法——通过竖杠“|”来实现。
try {
throw new LengthException("LengthException");
// throw new DivisionByZeroError("DivisionByZeroError");
// throw new Exception("Exception");
} catch (\DivisionByZeroError | \LengthException $e) {
echo "出错消息 --- ", $e->getMessage(), PHP_EOL;
} catch (\Exception $e) {
echo "出错消息 --- ", $e->getMessage(), PHP_EOL;
} finally {
// ...
}
7.use 组合声明
use 组合声明可以减少 use 的输入冗余。
use PHPGoodTaste\Utils\{
Util,
Form,
Form\Validation,
Form\Binding
};