宝哥软件园

深入分析PHP7.0的新特性(五个新特性)

编辑:宝哥软件园 来源:互联网 时间:2021-09-28

到目前为止,PHP已经正式发布了php7的RC5版本,预计第一个正式版本会在11月左右发布!现在,php7的主要特性肯定是定型的,不会有任何改变。一些版本的后续迭代主要是bug修复、优化等等。让我们谈谈我们一直期待的php7.0的五个新特性。

如果使用基于composer和PSR-4的框架,这样写能成功加载类文件吗?其实composer注册的自动加载方法是在调用类的时候根据类的命名空间找到位置,对它没有影响。

1.运算符(空合并运算符)

把这个放在第一位,因为我觉得很有用。用法:

$a=$_GET['a']?1;它相当于:

?php$a=isset($_GET['a'])?$ _ GET[' a ']: 1;我们知道三元运算符可以这样使用:

一美元?3360 1,但这是基于已经定义了$a的前提。添加了?操作者可以简化判断。

2.函数返回值类型声明。

官方文档提供的示例(注意…的边长参数语法只在5.6以上的PHP版本中可用):

?phpfunction arraysSum(数组.$ 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]);从这个例子可以看出,函数(包括匿名函数)现在可以指定返回值的类型。

该声明的措辞与swift有些相似:

func say Hello(personName : String)-String {让问候语='Hello,' persona name '!'返回问候}可以帮助我们避免PHP的隐式类型转换带来的一些问题。在定义函数之前考虑预期的结果可以避免一些不必要的错误。

但是,还有一个特点需要注意。PHP 7增加了一个声明指令:strict_types,它不仅使用了严格模式。

使用返回值类型声明时,如果没有声明为严格模式,如果返回值不是期望的类型,PHP仍然会对其进行强制类型转换。但是,如果它处于严格模式,将会出现致命的类型错误。

强制模式:

?phpffunction foo($ a): int { return $ a;} foo(1.0);以上代码可以正常执行,foo函数返回int 1没有任何错误。

严格模式:

?phpdeclare(strict _ type=1);function foo($ a): int { return $ a;} foo(1.0);# PHP致命错误:未捕获的类型错误: foo()的返回值必须是整数类型,在测试中返回浮点

声明后,将触发致命错误。

是不是有点类似js的严格模式?

3.标量类型声明。

PHP 7中函数的参数类型声明可以是标量的。在PHP 5中,只能是类名、接口、数组或可调用(PHP 5.4,就是可以是函数,包括匿名函数),现在也可以使用string、int、float和bool。

官方示例:

?php//strong制模式函数sumofinets(int.$ ints){ return array _ sum($ ints);}var_dump(sumOfInts(2,' 3 ',4.1));需要注意的是,上面提到的严格模式问题在这里也是适用的:在强制模式(默认,强制类型转换)下,意外的参数仍然会被强制转换为类型,在严格模式下,会触发TypeError的致命错误。

4.使用批处理声明。

在PHP 7中使用可以用一句话声明多个类或函数或常量:

?phpuse some/namespace/{ClassA,ClassB,CLaSS C as C };使用函数some/namespace/{fn_a,fn_b,fn _ c };使用const some/namespace/{ConstA,ConstB,ConstC };但是,有必要写出每个类或函数或常量的名称(没有像python这样的import *方法)。

需要注意的问题是:如果使用基于composer和PSR-4的框架,这种写法能否成功加载类文件?其实composer注册的自动加载方法是在调用类的时候根据类的命名空间找到位置,对它没有影响。

5.其他特征。

我就不介绍其他一些功能了。如果你感兴趣,你可以查看官方文件:http://php.net/manual/en/migration70.new-features.php.

简单说几句:

PHP 5.3开始有匿名函数,现在有匿名类。

定义现在可以定义一个常量数组;一个调用方法被添加到闭包;生成器(或者迭代器更合适)可以有一个最终的返回值(return),或者它可以通过yield from(生成器委托)的新语法进入另一个生成器。

发生器的两个新特性(返回和来自)可以组合。具体外观可以自己测试。PHP 7现在在RC5中,最终版本应该很快就会到来。

以上都是关于php7.0的新特性,希望大家喜欢这篇文章。

更多资讯
游戏推荐
更多+