形参处理变更
1. 不再允许定义同名参数.
以下方法会触发一个编译器错误:
public function foo($a, $b, $unused, $unused) {}
应该区分参数名:
public function foo($a, $b, $unused1, $unused2) {}
2. func_get_arg() 与 func_get_args() 不再返回绑定到形参的原始值(传入值), 而是返回可能被修改过的当前值:
function foo($x) {
$x++;
var_dump(func_get_arg(0));
}
foo(1);
----------
PHP7 打印int(2)
PHP5 打印int(1)
代码应该调整为调用func_get_arg()之后再修改参数
function foo($x) {
var_dump(func_get_arg(0));
$x++;
}
或者完全避免修改任何参数
function foo($x) {
$newX = $x + 1;
var_dump(func_get_arg(0));
}
3. 同样, 异常回溯信息(backtraces)也只显示可能被修改后的值
function foo($x) {
$x = 42;
throw new Exception;
}
foo("string");
----------
PHP7
Stack trace:
#0 file.php(4): foo(42)
#1 {main}
PHP5
Stack trace:
#0 file.php(4): foo('string')
#1 {main}
这个调整不会影响代码的行为,不过在调试的时候需要注意这个变化. 其他和参数有关的函数都是同样的调整,比如debug_backtrace().
Relevant RFC: phpng