PHP 7从入门到精通(视频教学版)
上QQ阅读APP看书,第一时间看更新

1.3 PHP7的新特点

PHP7是PHP编程语言的一个主要版本,是开发Web应用程序的一次革命,可开发和交付移动企业和云应用。此版本被认为是PHP 5后最重要的变化。

和早期版本相比,PHP7有以下新的特点。

1.标量类型声明

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

    <? php
    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
    )

2. null合并运算符

新增了null合并运算符“? ? ”。它可以替换三元表达式和isset()。例如:

    $a = isset($_GET['a']) ? $_GET['a'] : 1;

可以用null合并运算符替换如下:

    $a = $_GET['a'] ? ? 1;

这两个语句的含义都是:如果变量a存在且值不为NULL,就会返回自身的值,否则返回第二个操作数。可见,新增的??运算符可以简化判断语句。

3.组合比较符

组合比较符<=>用于比较两个表达式。例如,$a<=>$b,表示当$a大于、等于、小于$b时分别返回1、0、-1。例如:

    <? php
    //整型举例
    echo 1 <=> 1; //输出0
    echo 1 <=> 2; //输出-1
    echo 2 <=> 1; // 输出1
    // 浮点型举例
    echo 5.5 <=> 5.5 //输出0
    echo 5.5 <=> 7.0; //输出-1
    echo 7.0 <=> 5.5; //输出1
    // 字符串型举例
    echo "a" <=> "a"; //输出0
    echo "a" <=> "b"; //输出-1
    echo "b" <=> "a"; //输出1
    ?>

4.通过define() 定义常量数组

对于常量数组,可以使用define()定义,例如:

    <? php
    define('PERSON', ['xiaoming', 'xiaoli', 'xiaolan']);
    echo PERSON[1]; // 输出 "xiaoli"
    ?>

5.匿名类

现在支持通过new class来实例化一个匿名类,可以用来替代一些“用后即焚”的完整类定义。

6.支持Unicode字符格式

PHP7支持任何有效的codepoint编码,输出为UTF-8编码格式的字符串。例如:

    <? php
      echo "\u{6666}";
    ?>

在PHP7环境下输出为“晦”,而在早期版本中则输出为“\u{6666}”。

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

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

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

8.性能大幅度提升

PHP7比PHP5速度快2倍多。另外,PHP7降低内存消耗,优化后PHP7使用较少的资源,比PHP 5.6低了50%的内存消耗。同时,PHP7也支持64位架构机器,运算速度更快。PHP7可以服务于更多的并发用户,无须任何额外的硬件。