博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转:备忘---PHP 5.5 新特性
阅读量:6653 次
发布时间:2019-06-25

本文共 1933 字,大约阅读时间需要 6 分钟。

PHP5.5 前不久前刚刚发布,里面的新特性有什么?官方文档在这里:

1 生成器 yield关键字

yield的中文文档在这里:http://php.net/manual/zh/language.generators.overview.php

查看文档,能知道yield的一个功能就是能有效的降低迭代的内存开销。比如官网的这个xrange例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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版本的实现同一功能的函数把。

2 finally关键字

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

3 foreach 支持list()

对于“数组的数组”进行迭代,之前需要使用两个foreach,现在只需要使用foreach + list了,但是这个数组的数组中的每个数组的个数需要一样。看文档的例子一看就明白了。

1
2
3
4
5
6
7
8
9
10
<?php
$array 
= [
    
[1, 2],
    
[3, 4],
];
 
foreach 
(
$array 
as 
list(
$a
,
$b
)) {
    
echo 
"A: $a; B: $b\n"
;
}
?>

4 empty() 支持自定义函数了

之前empty()中的参数是不能为函数的。现在可以了

1
2
3
4
5
6
7
8
9
10
<?php
function 
foo(){
    
return 
false;
}
 
if
(
empty
(foo())){
    
echo 
11;
}
else 
{
    
echo 
12;
}

5 非变量array和string也能支持下标获取了

1
2
3
4
5
6
7
8
<?php
  
echo 
array
(1, 2, 3)[0];
echo 
[1, 2, 3][0];
  
echo 
"foobar"
[2];
  
?>

6 类名通过::class可以获取

1
2
3
4
5
6
7
8
<?php
namespace 
Name\Space;
class 
ClassName {}
 
echo 
ClassName::
class
;
 
echo 
"\n"
;
?>

7 增加了opcache扩展

使用opcache会提高php的性能,你可以和其他扩展一样静态编译(--enable-opcache)或者动态扩展(zend_extension)加入这个优化项。

转载于:https://www.cnblogs.com/dasn/articles/6377473.html

你可能感兴趣的文章
兼容所有浏览器的复制方法
查看>>
iOS tableView自定义删除按钮
查看>>
2014年(实际上是2014界毕业生)互联网IT公司产品、技术类人员工资待遇
查看>>
List的foldLeft、foldRight、sort操作代码实战之Scala学习笔记-28
查看>>
svn revert说明
查看>>
plsql快捷开发
查看>>
移植x264到vs2008之二
查看>>
Python列表和元组
查看>>
比较全的 C# 操作 Word的代码
查看>>
初探AIR for“.NET研究” Android开发
查看>>
(转)matlab与C混合编程之中级篇
查看>>
pip安装错误,用镜像
查看>>
如何在open xml excel 中存储自定义xml数据?
查看>>
301和302跳转的区别
查看>>
【PM面试题】请设计一个老年人用的新闻App
查看>>
Linux安装 Mysql
查看>>
thickbox传递参数
查看>>
hdu 2082 找单词
查看>>
百度地图3.7.1获取当前的位置,并自定义自身位置的图标
查看>>
CuteEditor.Editor+a+a+c+a+a.a() System.RuntimeType.get_Assembly() 问题解决方法
查看>>