PHP5.5更新
不再支持windows xp 和 2003
yield 生成器
生成器允许你在 foreach 代码块中写代码来迭代一组数据而不需要在内存中创建一个数组, 那会使你的内存达到上限,或者会占据可观的处理时间。相反,你可以写一个生成器函数,就像一个普通的自定义函数一样, 和普通函数只返回一次不同的是, 生成器可以根据需要 yield 多次,以便生成需要迭代的值。
使用生成器循环,可以降低内存使用
1
2
3
4
5
6
7
8
9
10
11
12
function xrange($start, $limit, $step = 1)
{
for ($i = $start; $i <= $limit; $i += $step) {
yield $i;
}
}
foreach (xrange(1, 100000, 2) as $k => $val) {
echo 'key:' . $k . ' and val:' . $val . "<br>";
}新增finally关键字
不论是否异常,始终会执行finally,如果都有返回值,finally将会覆盖t ry,catch中的返回
1
2
3
4
5
6
7try{
return 1;
}catch(){
return 2;
}finally{
return 3;
}
foreach支持list()
1
2
3
4
5
6
7
8
9
$arr = [
[1,3,4],
[2,3,5]
];
foreach ($arr as list($a, $b)) {
echo $a . '-' . $b . ' ';
}
//输出:1-3 2-3
empty()支持任意表达式
1
2empty($a+$b);
empty($a == $b);
Array和String支持直接获取元素
1
2echo [1,2,3][0]; // 1
echo 'abc'[0] // a新增密码算法 password_hash
1
2
3
4
5
$str = password_hash(123456,PASSWORD_DEFAULT);
password_verify('123456',$str);
password_needs_rehash($str,PASSWORD_DEFAULT,['cost'=>15]);
password_get_info($str);废弃mysql扩展
preg_replace函数中用到的\e修饰符现在被弃用
使用
NULL
作为参数调用 set_error_handler() 将重置错误处理程序。当使用
NULL
调用set_error_handler() 和 set_exception_handler() 时, 现在分别返回上一个错误或异常处理程序。新增函数 array_column()
说明:array_column() 返回
input
数组中键值为column_key
的列, 如果指定了可选参数index_key
,那么input
数组中的这一列的值将作为返回数组中对应值的键。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
$records = array(
array(
'id' => 2135,
'first_name' => 'John',
'last_name' => 'Doe',
),
array(
'id' => 3245,
'first_name' => 'Sally',
'last_name' => 'Smith',
),
array(
'id' => 5342,
'first_name' => 'Jane',
'last_name' => 'Jones',
),
array(
'id' => 5623,
'first_name' => 'Peter',
'last_name' => 'Doe',
)
);
var_dump(array_column($records,'first_name'));
//返回如下:
array (size=4)
0 => string 'John' (length=4)
1 => string 'Sally' (length=5)
2 => string 'Jane' (length=4)
3 => string 'Peter' (length=5)
var_dump(array_column($records,'first_name','id'));
//返回如下:
array (size=4)
2135 => string 'John' (length=4)
3245 => string 'Sally' (length=5)
5342 => string 'Jane' (length=4)
5623 => string 'Peter' (length=5)
var_dump(array_column($records,'first_name','last_name'))
//返回如下:后面的会覆盖相同的健名
array (size=3)
'Doe' => string 'Peter' (length=5)
'Smith' => string 'Sally' (length=5)
'Jones' => string 'Jane' (length=4)新增boolval()函数
说明:将变量转换为bool值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
echo '0: '.(boolval(0) ? 'true' : 'false')."\n";
echo '42: '.(boolval(42) ? 'true' : 'false')."\n";
echo '0.0: '.(boolval(0.0) ? 'true' : 'false')."\n";
echo '4.2: '.(boolval(4.2) ? 'true' : 'false')."\n";
echo '"": '.(boolval("") ? 'true' : 'false')."\n";
echo '"string": '.(boolval("string") ? 'true' : 'false')."\n";
echo '"0": '.(boolval("0") ? 'true' : 'false')."\n";
echo '"1": '.(boolval("1") ? 'true' : 'false')."\n";
echo '[1, 2]: '.(boolval([1, 2]) ? 'true' : 'false')."\n";
echo '[]: '.(boolval([]) ? 'true' : 'false')."\n";
echo 'stdClass: '.(boolval(new stdClass) ? 'true' : 'false')."\n";
//执行结果:
0: false
42: true
0.0: false
4.2: true
"": false
"string": true
"0": false
"1": true
[1, 2]: true
[]: false
stdClass: true