我以前用过的php的最高版本是php5.6。在换新工作之后,公司使用的是PHP7。据说PHP7的性能比之前提高很多。下面整理下php7的新特性。力求简单了解。不做深入研究。
1.变量类型声明
- 函数的参数使用严格模式时,如果传入的参数数据类型不一致会返回一个
TypeError
异常 - 可声明的数据类型有:Class/interface、self、array、callback、bool、float、int、string。[参考资料-函数参数](http://php.net/manual/zh/functions.arguments.php#functions.arguments.type-declaration)
2.增加了返回值类型声明。
- 现在可以指定函数的返回值的数据类型了。
- 返回值可声明类型,参考变量类型声明。
function hasReturn() : bool
{
}
3.null合并运算符
- 这个特性很好啊。很多三元表达式+isset()的写法可以用这种方法来写了。
- null合并运算符:如果变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。 很像mysql的ifnull()。
$value = $_GET['memc_codes'] ?? '没使用优惠券啊';
4. 太空船操作符
- 用于比较两个表达式,判断他们之间的大小关系,小于、等于、大于分别返回-1,0,1.
echo 1 <=> 1;
echo 1 <=> 2;
echo 2 <=> 1;
5. defin() 可以定义数组常量
- 也就是说常量可以被定义成数组
6. 可以通过new class来实例化一个匿名类
- 匿名类,可以用完就扔。
7. 支持 Unicode codepoint 转译语
8. Closure::call() 暂时绑定一个方法到对象上闭包并立即调用
class A { private $lang = 'php';}
$getLang = function() { return $this->lang;};
echo $getLang->call(new A); // 暂时将getLang函数绑定到A上,并执行它
9. unserialize() 第二个参数可以对反序列化的数据进行过滤
- 防止代码注入
10. 新增intlChar用于操作多字符集的unicode字符
11. assert() 增加,写codeception更方便了
- assert() 现在是一个语言结构。第一个可以是参数是表达式。
12. 一个use可以导入多个类了
use model\A,B,C;
13. 生成器可以返回表达式,并且通过调用Generator::getReturn()方法来获取生成器的值。
$gen = (function(){
yield 1;
return 3;
})();
foreach ($gen as $val) {
echo $val,PHP_EOL;
}
echo $gen->getReturn(),PHP_EOL; ## 这里
14. 生成器中可以使用 yield from引入其他生成器
function gen() {
yield 1;
yield from gen2();
}
function gen2() {
yield 3;
yield 4;
}
froeach ($gen as $val) {
echo $val,PHP_EOL;
}
15. 新增加了正常函数intdiv()
echo intdiv(10,3); // 3
16. session_start() 新增参数可以修改系统设定值
- 这个值得仔细看下。会话选项