0

我可以通過多種方式來實現以下功能;但我希望有一個超級優雅的解決方案。我可以使用PHP超全局變量作爲用戶定義函數參數的默認值嗎?在PHP中使用Superglobal作爲默認函數參數

實施例:

function test1($foo=$_SERVER['PATH']) { 
    echo $foo; 
} 

上面的代碼吐出一個錯誤。就像我說的,我知道我可以用下面的代碼實現同樣的事情(但上面的代碼是更具吸引力):

function test2($foo) { 
    if (!isset($foo)) $foo = $_SERVER['PATH']; 
    echo $foo; 
} 

感謝您的幫助!

+0

我相信第一個解決方案不會工作,因爲在腳本評估時(類似於解釋語言的編譯),$ _SERVER ['PATH']'值尚未定義。 –

+0

這聽起來似乎合理; PHP引擎吐出的錯誤是「解析錯誤:語法錯誤,第2行M:\ test.php中出現意外的T_VARIABLE」您認爲該錯誤與您的解釋是否一致? – lukeavsec

+0

我會說它的確如此。一個變量(一個運行時元素)在靜態上下文(一個「編譯」時間元素)中可能沒有意義。 –

回答

0

我會建議傳遞變量,但如果你想使用一個全球性的,你可以在你的函數頂部做

function test2() { 
    global $foo; 
    ... 
} 

與設定值比較其他地方,或者去你的第二個想法 - 但你需要在函數參數中指定一個默認值使其成爲可選項。

function test2($foo='') { 
    if (empty($foo)) $foo = $_SERVER['PATH']; 
    echo $foo; 
} 

處理函數外部變量的另一種方法是通過引用傳遞它們。這會傳遞給原始變量的引用,而不是副本,因此,在函數內部進行的任何更改都會影響函數範圍之外的原始變量值。

$foo = 'bar'; 
function test2(&$foo) { 
    echo $foo; // this will output "bar" 
} 
相關問題