2011-04-05 85 views
3

我的代碼:傳遞未設置變量函數

function Check($Variable, $DefaultValue) { 
    if(isset($Variable) && $Variable != "" && $Variable != NULL) { 
     return $Variable; 
    } 
    else { 
     return $DefaultValue; 
    } 
} 

$a = Check(@$foo, false); 
$b = Check(@$bar, "Hello"); 

//$a now equals false because $foo was not set. 
//$b now equals "Hello" because $bar was not set. 
  1. 當一個變量不存在,並傳遞給函數(抑制)中的錯誤是什麼實際傳遞?
  2. 這個函數可以展現任何未定義的行爲嗎?
  3. 是否有更好的方法來包裝變量存在的測試並從函數提供默認值?
  4. 當測試變量時,isset()是否在引擎蓋下檢查?

編輯:

默認值是那裏是用戶定義的。有時它會是一個數字,有時是一個字符串。

+0

如果函數正在查找某個引用,您可以傳遞一個未設置的變量。唯一的缺點是它不能接受表達式,只能接受變量。 '函數Check(&$ Variable,$ DefaultValue){...' – 2017-09-21 15:51:45

回答

6
  1. NULL通過,引發通知錯誤。
  2. 不,函數只能看到它的參數(它並不在意它被調用的方式)
  3. 你可以很容易地指定默認值 - 函數func($ mandatory,$ optional ='default value');
  4. Isset在其參數上帶有一個函數是毫無意義的,因爲參數已經在函數簽名中設置。
+0

是否需要將缺省值參數放在參數列表的末尾,就像在C中一樣? – Dexter 2011-04-05 12:11:57

+0

['isset'](http://php.net/isset)對具有'null'的變量返回false:'$ var = null; var_dump(isset($ var));' – Gumbo 2011-04-05 12:12:30

+0

謝謝。默認值是用戶定義的。有時它會是一個數字,有時是一個字符串。 – 2011-04-05 12:14:24

1
  1. null將被傳遞
  2. PHP中AFAIK沒有未定義行爲
  3. 通常測試與empty($var)進行,例如:Check(empty($foo) ? null : $foo),但根據具體情況isset可能更適合
  4. 什麼isset確實是documented - 它測試範圍內是否存在這樣的變量,並且其值與null不一致
1

當一個變量不存在,是 傳遞給函數(抑制 錯誤)什麼是真正通過呢?

在這種情況下,您試圖從一個不存在的變量
讀那麼,你得到null - 這是傳遞給函數。


有任何未定義行爲 這個功能可以顯示出?

不是我所看到的 - 除了使用@算子不是一個好的做法。