找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 384|回复: 0
打印 上一主题 下一主题

解析PHP 5.5 新特性

[复制链接]

2487

主题

2487

帖子

7391

积分

论坛元老

Rank: 8Rank: 8

积分
7391
跳转到指定楼层
楼主
发表于 2018-2-14 08:15:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            PHP5.5 前不久前刚刚发布,里面的新特性有什么?官方文档在这里:
http://www.php.net/manual/zh/migration55.new-features.php
1 生成器 yield关键字
yield的中文文档在这里:http://php.net/manual/zh/language.generators.overview.php
查看文档,能知道yield的一个功能就是能有效的降低迭代的内存开销。比如官网的这个xrange例子:
[U]复制代码[/U] 代码如下:
这里的xrange是一个迭代,功能和range是一样的,如果使用range函数的话,那么函数内部实现会储存每个迭代的中间过程,即每个中间变量都有个内存空间,那么首先程序使用的内存空间就大了,而且分配内存,回收内存都会导致程序的运行时间加长。但是如果使用上yield实现的xrange函数的话,里面所有的中间变量都只使用一个内存$i,这样节省的时间和空间都会变小。
那么为什么yield会有这样的效果呢?联想到lua中的yield,这里就算是协程的概念了。在lua语言中,当程序运行到yield的时候,使用协程将上下文环境记录住,然后将程序操作权归还到主函数,当主函数调用resume的时候,会重新唤起协程,读取yield记录的上下文。这样形成了程序语言级别的多协程操作。php 5.5这里的yield也是同样的道理,当程序运行到yield的时候,当前程序就唤起协程记录上下文,然后主函数继续操作,只是php中没有使用如resume一样的关键字,而是“在使用的时候唤起”协程。比如上例中的foreach迭代器就能唤起yield。所以上面的这个例子就能理解了。
其实照着引用yield来说,好多内部函数,特别是迭代有关的函数应该都有可能进行优化。或许后续会有yield版本和非yield版本的实现同一功能的函数把。

2 finally关键字
这个和java中的finally一样,经典的try ... catch ... finally 三段式异常处理。

3 foreach 支持list()
对于“数组的数组”进行迭代,之前需要使用两个foreach,现在只需要使用foreach + list了,但是这个数组的数组中的每个数组的个数需要一样。看文档的例子一看就明白了。
[U]复制代码[/U] 代码如下:

4 empty() 支持自定义函数了
之前empty()中的参数是不能为函数的。现在可以了
[U]复制代码[/U] 代码如下:
5 非变量array和string也能支持下标获取了
[U]复制代码[/U] 代码如下:

6 类名通过::class可以获取
[U]复制代码[/U] 代码如下:

7 增加了opcache扩展
使用opcache会提高php的性能,你可以和其他扩展一样静态编译(--enable-opcache)或者动态扩展(zend_extension)加入这个优化项。
            
            
您可能感兴趣的文章:
  • PHP5的XML新特性
  • PHP 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
  • PHP5新特性: 更加面向对象化的PHP
  • PHP 5.3新特性命名空间规则解析及高级功能
  • PHP5各个版本的新功能和新特性总结
  • PHP 实现代码复用的一个方法 traits新特性
  • 浅谈php7的重大新特性
  • 我整理的PHP 7.0主要新特性
  • PHP7 新特性详细介绍
  • PHP 7.1新特性的汇总介绍
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端