形参处理变更

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

results matching ""

    No results matching ""