php7.4新特性,PHP7新特性

  php7.4新特性,PHP7新特性

  开始介绍PHP7.0的新特性,详情请参考官网介绍。我选一些来详细解释一下。

  http://php.net/manual/en/migration70.new-features.php

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

  $a=$_GET[a]?1;

  它相当于:

  $a=empty($_GET[a])?1:$ _ GET[ a ];

  我们知道三元运算符可以这样使用:

  $a? 1

  但这是建立在已经定义了$a的前提下的。新的?操作员可以简化判断。简化代码,让代码更直观!

  2.函数返回值类型声明

  官方文件提供的例子(注意边长参数语法.仅在PHP 5.6或更高版本中可用):

  ?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

  函数arraysSum(数组.$ arrays):array { return array _ map(function(array $ array):int { return array _ sum($ array);},$ arrays);} print _ r(arraysum([1,2,3],[4,5,6],[7,8,9]);

  从这个例子可以看出,所有的函数(包括匿名函数)都可以指定返回值的类型。

  这个特性可以帮助我们避免PHP隐式类型转换带来的一些问题。在定义函数之前考虑预期的结果可以避免一些不必要的错误。

  但是,这里还有一个特点需要注意。PHP增加了一个declare指令:strict_types,它使用严格模式。

  当使用返回值类型声明时,如果没有在严格模式下声明,PHP仍然会强制转换不是预期类型的返回值。但是,如果是严格模式,则会启动致命的TypeError错误。

  强制模式:

  # PHP致命错误:未捕获的类型错误:foo()的返回值必须是integer类型,在test.php:6中返回float

  3.标量类型声明

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

  //h3制模式

  函数sumOfInts(int.$ ints){ return array _ sum($ ints);} var_dump(sumOfInts(2, 3 ,4.1));

  需要注意的是,上面提到的严格模式的问题在这里也是适用的:在强制模式下(默认为强制键入),不符合预期的参数仍然会被强制键入,在严格模式下,会触发TypeError的致命错误。

  4.使用批量声明

  PHP 7中的Use可以在一句话中声明多个类或函数或const:

  ?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

  使用一些命名空间{ClassA,ClassB,class C as C };

  使用函数somenamespace{fn_a,fn_b,fn _ c };使用const somenamespace{ConstA,ConstB,ConstC };

  但是你仍然必须写出每个类或函数或常量的名字(没有像python这样的import *的方法)。

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

  再简单说几个:

  1.PHP 5.3开始有匿名函数,现在有匿名类;

  2.define现在可以定义一个常量数组;

  3.一个调用方法被添加到闭包;

  4.生成器(或者迭代器更合适)可以有一个最终返回值(return),也可以通过yield from的新语法输入另一个生成器(生成器委托)。

  生成器的两个新功能(return和yield from)可以结合使用。你可以自己测试一下。

php7.4新特性,PHP7新特性