用数组标识符为类定义数组类型的属性时,数组的键不会被覆盖
1<?php
2class C {
3const ONE = 1;
4public $array = [
5self::ONE => 'foo',
6'bar',
7'quux',
8];
9}
10var_dump((new C)->array);
11/*
125.5.x 输出
13array(2) {
14[0]=>
15string(3) "bar"
16[1]=>
17string(4) "quux"
18}
19
207.0.x输出
21array(3) {
22[1]=>
23string(3) "foo"
24[2]=>
25string(3) "bar"
26[3]=>
27string(4) "quux"
28}
29*/
严格的 json_decode(),对于 JSON 字面量 true,false 和 null,如果不采用小写格式,将会被 json_decode() 函数拒绝, 同时相应的设置 json_last_error()
Mcrypt 函数需要有效长度的密钥和初始向量
cURL 文件上传:必须先设置 CURLOPT_SAFE_UPLOAD 为 FALSE 才能够使用 @file 语法来上传文件。 建议使用 CURLFile 类来上传文件。
set_exception_handler() 不再保证收到的一定是 Exception 对象
1<?php
2// PHP 5 时代的代码将会出现问题
3function handler(Exception $e) { ... }
4set_exception_handler('handler');
5
6// 兼容 PHP 5 和 7
7function handler($e) { ... }
8
9// 仅支持 PHP 7
10function handler(Throwable $e) { ... }
定义抽象静态方法直接报错
重复定义构造器函数直接报错
内部构造器出错直接抛异常(原来返回null)
两个trait中包含相同的属性直接报错
关于间接使用变量、属性和方法的变化。使用了旧的从右到左的解析顺序的代码必须被重写,明确的使用圆括号来表明顺序
表达式 PHP 5 的解析方式 PHP 7 的解析方式 $$foo['bar']['baz']
${$foo['bar']['baz']}
($$foo)['bar']['baz']
$foo->$bar['baz']
$foo->{$bar['baz']}
($foo->$bar)['baz']
$foo->$bar['baz']()
$foo->{$bar['baz']}()
($foo->$bar)['baz']()
Foo::$bar['baz']()
Foo::{$bar['baz']}()
(Foo::$bar)['baz']()
global只接受简单变量,可变变量不再能够与 global 关键字一起使用。 如果需要的话可以使用圆括号来模拟之前的行为。
1<?php
2function f() {
3// Valid in PHP 5 only.
4global $$foo->bar;
5
6// Valid in PHP 5 and 7.
7global ${$foo->bar};
8}
call_user_method() and call_user_method_array()被移除
new 操作符创建的对象不能以引用方式赋值给变量
函数定义不可以包含多个同名参数
Switch 语句不可以包含多个 default 块
在函数中检视参数值会返回 当前 的值
1<?php
2function foo($x) {
3$x++;
4var_dump(func_get_arg(0));
5}
6foo(1);//2
不再提供 $HTTP_RAW_POST_DATA 变量。 请使用 php://input 作为替代。
INI 文件中 # 注释格式被移除,即使用#注释依旧会被解析
1;test.ini 文件
2#test=1
3name=xiao
1<?php
2$arr = parse_ini_file('test.ini');
3var_dump($arr);
4/*
5输出
6array(2) {
7["#test"]=>
8string(1) "1"
9["name"]=>
10string(4) "xiao"
11}
12*/
JSON 扩展已经被 JSOND 取代。对于数值的处理,有以下两点需要注意的: 第一,数值不能以点号(.)结束 (例如,数值 34. 必须写作 34.0 或 34)。 第二,如果使用科学计数法表示数值,e 前面必须不是点号(.) (例如,3.e3 必须写作 3.0e3 或 3e3)。 另外,空字符串不再被视作有效的 JSON 字符串。
将浮点数转换为整数的时候,如果浮点数值太大,导致无法以整数表达的情况下, 在之前的版本中,内部函数会直接将整数截断,并不会引发错误。 在 PHP 7.0 中,如果发生这种情况,会引发 E_WARNING 错误,并且返回 NULL
由于内部排序算法进行了提升, 可能会导致对比时被视为相等的多个元素之间的顺序不稳定。
foreach不再改变内部数组指针
foreach 通过值遍历时,循环操作的value值为数组的副本,但如果对数组本身进行修改,foreach结束后会生效。
1<?php
2$arr = [1,2,3];
3foreach($arr as $v){
4var_dump($v);
5$arr[1] = 5;
6$arr[3] = 10;
7}
8print_r($arr);
9/*
10php7输出:
11int(1)
12int(2)
13int(3)
14Array
15(
16[0] => 1
17[1] => 5
18[2] => 3
19[3] => 10
20)
21*/
foreach通过引用遍历时,操作的value是其本身的值,所有修改会在foreach内部生效。
1<?php
2$arr = [1,2,3];
3foreach($arr as &$v){
4var_dump($v);
5$arr[1] = 5;
6$arr[3] = 10;
7}
8print_r($arr);
9/*
10int(5)
11int(3)
12int(10)
13Array
14(
15[0] => 1
16[1] => 5
17[2] => 3
18[3] => 10
19)
20*/
十六进制字符串不再被认为是数字
1<?php
2var_dump("0x123" == "291");
3var_dump(is_numeric("0x123"));
4var_dump("0xe" + "0x1");
5var_dump(substr("foo", "0x1"));
6
7/*
8php5输出:
9
10bool(true)
11bool(true)
12int(15)
13string(2) "oo"
14
15php7输出:
16
17bool(false)
18bool(false)
19PHP Notice: A non well formed numeric value encountered in /root/test/string.php on line 4
20PHP Notice: A non well formed numeric value encountered in /root/test/string.php on line 4
21int(0)
22PHP Notice: A non well formed numeric value encountered in /root/test/string.php on line 5
23string(3) "foo"
24*/
filter_var() 函数可以用于检查一个 string 是否含有十六进制数字,并将其转换为integer:
1<?php
2$str = "0xffff";
3$int = filter_var($str, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX);
4if (false === $int) {
5throw new Exception("Invalid integer!");
6}
7var_dump($int); // int(65535)
PHP5.5.3升级PHP7.0.2
最新推荐文章于 2024-01-12 11:04:30 发布