解析PHP 5.5 新特性
前端之家收集整理的这篇文章主要介绍了
解析PHP 5.5 新特性,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
PHP5.5 前不久前刚刚发布,里面的新特性有什么?官方文档在这里:
http://www.php.net/manual/zh/migration55.new-features.php
<FONT style="COLOR: #ff0000">1 生成器 yield关键字
yield的
中文文档在这里:http://
PHP.net/manual/zh/language.generators.overview.
PHP查看文档,能知道yield的一个
功能就是能有效的降低迭代的内存开销。比如官网的这个xrange例子:
<div class="codetitle">
<a style="CURSOR: pointer" data="94666" class="copybut" id="copybut94666" onclick="doCopy('code94666')"> 代码如下: <div class="codebody" id="code94666">
<?
PHP function xrange($start,$limit,$step = 1) {
for ($i = $start; $i <= $limit; $i += $step) {
yield $i;
}
} echo 'Single digit odd numbers: '; /
Note that an array is never created or returned,
which saves memory.
/
foreach (xrange(1,9,2) as $number) {
echo "$number ";
} echo "\n";
?>
这里的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版本的实现同一
功能的
函数把。
<FONT style="COLOR: #ff0000">2 finally关键字
这个和java中的finally一样,经典的try ... catch ... finally 三段式异常处理。
<FONT style="COLOR: #ff0000">3 foreach 支持list()
对于“数组的数组”进行迭代,之前需要使用两个foreach,现在只需要使用foreach + list了,但是这个数组的数组中的每个数组的个数需要一样。看文档的例子一看就明白了。
<div class="codetitle">
<a style="CURSOR: pointer" data="86380" class="copybut" id="copybut86380" onclick="doCopy('code86380')"> 代码如下: