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可以服务于更多的并发用户,无须任何额外的硬件。