PHP function 參數 default value

php-logo
2011.08.06 Update: 感謝 jaceju 指正筆誤 自己定義 PHP Function 的時候,假設該函式有1個參數,您可以傳入該參數或者是不傳,但是函式裡面如何判斷是否有傳入該參數呢?先看看底下例子:
function test($arg_1 = NULL)
{
    // 判斷 $arg_1 參數是否傳入
    $arg_1 = $arg_1 || 'test';
    echo $arg_1; 
}
你會發現上面結果會是 1,而不是 test,大家會懷疑為什麼這樣寫不行呢,那是因為 || 是 boolean operators,他只會 return true 或是 false,而不是回傳 string,如果想這這樣寫,大概可以用 javascript 或 perl 語言來寫,javascript 可以參考之前的文章 [Javascript] 在函數裡設定參數預設值,然而 PHP 的正確寫法要用 ?: 來取代
function test($arg_1 = NULL)
{
    // 判斷 $arg_1 參數是否傳入
    $arg_1 = (isset($arg_1)) ? $arg_1 : 'test';
    // 或者是
    $arg_1 = $arg_1 ? $arg_1 : 'test';
    echo $arg_1; 
}
請參考 Logical Operators
  • jaceju

    第二個 code snippet 裡, || 應該是 : 對嗎?

  • Hi jaceju,

    You are right, I update it.

  • tzhuan

    第一個例子「$arg_1 = (isset($arg_1)) ? $arg_1 || ‘test’;」我測試的結果是syntax error,這是新版 php 的新語法嗎(我測的版本是5.3.3)?另外「$arg_1 = $arg_1 ? $arg_1 : ‘test’;」這個例子,如果 $arg_1 傳 FALSE 進來會有問題,所以還是得用 isset() 來判斷。

  • Hi,

    感謝你,那個地方是我的筆誤

  • BUG

    以上的範例為什麼不直接使用 function test($arg_1 = ‘test’) 要自己寫條件判斷?

  • 柏毅 (Bo-Yi Wu) 吳

    XD,function 的參數也是可以這樣寫,可能標題沒有定很清楚。