PHP7 常用新特性

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.

如果不开启strict_type,PHP将会尝试帮你转换成要求的类型,而开启之后,会改变PHP就不再做类型转换,类型不匹配就会抛出错误。

2. ?? ——NULL合并运算符

PHP7中添加了NULL合并运算符,不要小看这个“??”,有了它我们就能很方便的获取一个参数,并能在其为空的情况下提供一个默认值。如何??运算符左侧值存在并且不为NULL,则返回左侧,否则将返回其右侧值。

<?php  

// 获取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

};

8. 更多的Error变为可捕获的Exception

PHP7实现了一个全局的throwable接口,原来的Exception和部分Error都实现了这个接口(interface), 以接口的方式定义了异常的继承结构。于是,PHP7中更多的Error变为可捕获的Exception返回给开发者,如果不进行捕获则为Error,如果捕获就变为一个可在程序内处理的Exception。这些可被捕获的Error通常都是不会对程序造成致命伤害的Error,例如函数不存。PHP7进一步方便开发者处理,让开发者对程序的掌控能力更强。因为在默认情况下,Error会直接导致程序中断,而PHP7则提供捕获并且处理的能力,让程序继续执行下去,为程序员提供更灵活的选择。

例如,执行一个我们不确定是否存在的函数,PHP5兼容的做法是在函数被调用之前追加的判断function_exist,而PHP7则支持捕获Exception的处理方式。

猜你喜欢

转载自tzhennan.iteye.com/blog/2422496