• PHP7与php5
    • 致命错误将可用异常形式抛出
    • ?? null合并运算符
    • 标量类型声明
    • 返回值类型声明
    • 太空船操作符<=>(组合比较符)

    PHP7与php5

    php在2015年12月03日发布了7.0正式版,带来了许多新的特性,以下是不完全列表:

    • 性能提升:PHP7比PHP5.6性能提升了两倍。 Improved performance: PHP 7 is up to twice as fast as PHP 5.6

    • 全面一致的64位支持。 Consistent 64-bit support

    • 以前的许多致命错误,现在改成抛出异常。Many fatal errors are now Exceptions

    • 移除了一些老的不在支持的SAPI(服务器端应用编程端口)和扩展。Removal of old and unsupported SAPIs and extensions

    • 新增了空接合操作符。The null coalescing operator (??)

    • 新增加了结合比较运算符。Combined comparison Operator (<=>)

    • 新增加了函数的返回类型声明。Return Type Declarations

    • 新增加了标量类型声明。Scalar Type Declarations

    • 新增加匿名类。Anonymous Classes

    本教程主要讲解swoole将要用到或有相关性的特性

    致命错误将可用异常形式抛出

    在php7之后,大部分错误可通过异常形式抛出,并可使用catch拦截,例如:

    1. try {
    2. $a->test();//未定义该对象并没有该方法,抛出一个Throwable类
    3. // Code that may throw an Exception or Error.
    4. } catch (Throwable $t) {
    5. var_dump($t->getMessage());
    6. // Executed only in PHP 7, will not match in PHP 5
    7. } catch (Exception $e) {
    8. }

    运行之后将打印一条报错语句:

    1. string(40) "Call to a member function test() on null"

    ?? null合并运算符

    由于日常使用中存在大量同时使用三元表达式和 isset()的情况, php7添加了null合并运算符 (??) 这个语法糖。如果变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。例如:

    1. $a = $b??0;
    2. //如果当$b为null,则返回0.如果$b不为null,则返回$b;

    标量类型声明

    标量类型声明 有两种模式: 强制 (默认) 和 严格模式。 现在可以使用下列类型参数(无论用强制模式还是严格模式): 字符串(string), 整数 (int), 浮点数 (float), 以及布尔值 (bool)。它们扩充了PHP5中引入的其他类型:类名,接口,数组和 回调类型。例如:

    1. <?php
    2. function a(
    3. ?int $a /*参数必须是int或者null*/,
    4. string $b/*参数必须string*/,
    5. Closure $function /*参数必须是匿名函数*/,
    6. array $array/*参数必须是数组*/
    7. ){}

    类名/接口限定都需要考虑命名空间

    返回值类型声明

    PHP 7 增加了对返回类型声明的支持。 类似于参数类型声明,返回类型声明指明了函数返回值的类型。可用的类型与参数声明中可用的类型相同。例如:

    1. <?php
    2. function a():int{//必须返回int类型,否则报错
    3. return 1;
    4. }
    5. function b():?int{//必须返回int类型或者null类型,否则报错
    6. return 'das';
    7. }

    太空船操作符<=>(组合比较符)

    太空船操作符用于比较两个表达式。当$a小于、等于或大于$b时它分别返回-1、0或1。 比较的原则是沿用 PHP 的常规比较规则进行的。

    1. <?php
    2. // Integers
    3. echo 1 <=> 1; // 0
    4. echo 1 <=> 2; // -1
    5. echo 2 <=> 1; // 1
    6. // Floats
    7. echo 1.5 <=> 1.5; // 0
    8. echo 1.5 <=> 2.5; // -1
    9. echo 2.5 <=> 1.5; // 1
    10. // Strings
    11. echo "a" <=> "a"; // 0
    12. echo "a" <=> "b"; // -1
    13. echo "b" <=> "a"; // 1