參數處理機制修改



一、重複參數命名不再支援。

重複的參數命名不再支援。例如下面的程式碼執行的時候會報錯:

public function foo($a, $b, $unused, $unused) {
          // ...
}
編者按:應該沒有人這樣用吧。

二、func_get_arg和func_get_args()調整

func_get_arg()和func_get_args()這兩個方法傳回參數目前的值,而不是傳入時的值。目前的值有可能會被修改   

function foo($x) 
{
    $x++;
    var_dump(func_get_arg(0));
}
foo(1);
上面的程式碼會列印2, 而不是1。如果想列印原始的值,呼叫的順序調整下即可。

三、同樣在列印異常回溯訊息的時候也是顯示修改後的值。

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() .