page contents

php7学习—认识新特性

太空船操作符 <==> 太空船操作符用于比较两个表达式。例如,当$a小于、等于或大于$b时,它分别返回-1、0或1。比较的原则沿用PHP的常规比较规则进行。 标量类型声明和返回值的类...

太空船操作符 <==>


太空船操作符用于比较两个表达式。例如,当$a小于、等于或大于$b时,它分别返回-1、0或1。比较的原则沿用PHP的常规比较规则进行。


attachments-2020-03-5Er7dZ7e5e636b70ba94f.jpg


标量类型声明和返回值的类型声明

 

PHP 7可以对下面几种类型的参数做声明:字符串(string)、整型(int)、浮点型(float)以及布尔型(bool)。注意参数类型声明受制于默认模式和严格模式。默认模式下,当传入的参数不符合声明类型时,会首先尝试转换类型;而严格模式下,则直接报错。

 

attachments-2020-03-5WuMsrw45e636b6994d37.jpg


当注释掉第二行代码,程序才可以正常运行——PHP会首先尝试把’3.1’转为int型的3,然后再执行。(注意:这里的类型转换仅受制于可转换的类型,例如不能把’a’转为int型。)但是当开启严格模式后,代码会直接报错。因为函数的参数被声明为int型,但是传入的参数中包含一个string型和一个float型。

 

attachments-2020-03-nQRZ7zQ85e636b62591ff.png

这段代码额外声明了返回值的类型为int型。如果返回值的类型不是int型,在默认模式下,PHP会首先尝试转换返回值的类型为int型,如果不能转换,则会直接报错。

PHP 7.1对函数返回值的声明做了扩充,可以定义其返回值为void,无论是否开启严格模式,只要函数中有“return;”以外的其他return语句都会报错。

注意:参数类型不可以是void。

 

attachments-2020-03-zikMCJ9I5e636b4cc2698.png

attachments-2020-03-ncFrnCzq5e636b59196f3.png



null合并操作符


attachments-2020-03-0yQ5ns605e636b4457206.jpg


当代码中有连续的三元运算符的时候还可以像下边这样写:


attachments-2020-03-O7VPhOGr5e636b3e74e67.jpg

 

常量数组

 

在PHP 7之前是无法通过define来定义一个数组常量的,PHP 7支持了这个操作:

 

attachments-2020-03-w1M0xI9I5e636b3739ea3.jpg

 

namespace批量导入

 

在PHP 7之前,如果要导入一个namespace下的多个class,我们需要这样写:

 

attachments-2020-03-kdNLy4105e636b2e79cf2.jpg


在PHP 7中支持批量导入:

 

attachments-2020-03-EWSKkWrH5e636b26912fe.jpg


 

throwable接口

 

在PHP 7之前,如果代码中有语法错误,或者fatal error时,程序会直接报错退出,但是在PHP 7中有了改变。PHP 7实现了全局throwable接口,原来的Exception和部分Error实现了该接口。这种Error可以像Exception一样被第一个匹配的try/catch块捕获。如果没有匹配的catch块,则调用异常处理函数进行处理。如果尚未注册异常处理函数,则按照传统方式处理(fatal error)。

Error类并非继承自Exception类,所以不能用catch(Exceptione)...来捕获Error。可以用catch(Errore){...}来捕获Error。可以用catch(Errore)...来捕获Error。可以用catch(Errore){…},或者通过注册异常处理函数(set_exception_handler())来捕获Error:

 

attachments-2020-03-YLyYxWOn5e636b1dbb6b2.jpg


Closure::call()

 

在PHP 7之前,我们需要动态地给一个对象添加方法时,可以通过Closure来复制一个闭包对象,并绑定到一个$this对象和类作用域:

 

attachments-2020-03-wvcFY2ub5e636b174e109.jpg


在PHP 7中新添加了Closure::call(),可以通过call来暂时绑定一个闭包对象到$this对象并调用它:

 

attachments-2020-03-LCodnLn65e636b100eddf.jpg


intdiv函数

 

attachments-2020-03-N1J3bzhS5e636b0699b51.jpg


list的方括号写法

 

我们知道可以通过list来实现解构赋值,如下:

 

attachments-2020-03-NPeUcBiu5e636afd64315.jpg


[$a, $b, $c] = $arr;

注意:这里的[]并不是数组的意思,只是list的简略形式。

 

除了上文这些,PHP7还有很多其他的改变和特性。例如,foreach遍历数组时不再修改内部指针、移除了ASP和script PHP标签、移除了$HTTP_RAW_POST_DATA、匿名类、类常量可见性等

  • 发表于 2020-03-07 17:38
  • 阅读 ( 491 )
  • 分类:PHP开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1470 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章