引申https://stackoverflow.com/a/55191/547210
我創建一個驗證函數來檢查字符串變量,這可能會或可能不會被設置的幾個屬性。 (被檢查的屬性之一)
我正在試圖做的事情是在表單中接收參數未知數量的參數(見下文),並抑制可能由傳遞未設置變量導致的錯誤。
我通過使用func_get_args()
接收像validate([ mixed $... ])
這樣的變量上一篇文章提到通過引用傳遞它是可能的,現在是否可以在隱式地傳遞變量時這樣做?PHP抑制功能錯誤參數
0
A
回答
0
如果您傳遞的調用範圍中未設置變量,則func_get_args()
返回的數組將在變量傳遞的位置包含NULL
值,並且將觸發錯誤。這個錯誤不是在函數代碼本身觸發的,而是在函數調用中觸發的。因此,在函數的代碼中,沒有什麼可以做到的來抑制這個錯誤。
考慮一下:
function accepts_some_args() {
$args = func_get_args();
var_dump($args);
}
$myVar = 'value';
accepts_some_args($notSet, $myVar);
/*
Ouput:
Notice: Undefined variable: notSet in...
array(2) {
[0]=>
NULL
[1]=>
string(5) "value"
}
*/
正如你所看到的,變量名notSet
出現錯誤,告訴我們錯誤是在調用者的範圍引發的,而不是被調用的。
如果我們要對付的錯誤,我們可以這樣做:
accepts_some_args(@$notSet, $myVar);
...和前綴與邪惡@
操作變量名,但更好的解決辦法是不同的結構我們的代碼,所以我們可以自己做檢查:
function accepts_some_args ($args) {
var_dump($args);
}
$myVar = 'value';
$toPassToFunction = array();
$toPassToFunction[] = (isset($notSet)) ? $notSet : NULL;
$toPassToFunction[] = (isset($myVar)) ? $myVar : NULL;
accepts_some_args($toPassToFunction);
/*
Ouput:
array(2) {
[0]=>
NULL
[1]=>
string(5) "value"
}
*/
相關問題
- 1. 功能參數錯誤
- 2. Smarty錯誤抑制
- 3. 抑制WCF錯誤
- 4. 抑制SSL錯誤
- 5. flex4與PHP,錯誤參考功能
- 6. PHP錯誤抑制被忽略
- 7. 何時抑制PHP中的錯誤
- 8. 在php中抑制2048錯誤
- 9. PhP錯誤:功能
- 10. 如何抑制無效函數參數錯誤?
- 11. 瓶 - 錯誤有兩個參數功能,
- 12. 錯誤:功能參數太少
- 13. 錯誤:功能參數太多
- 14. 錯誤功能太多參數
- 15. 功能模板參數編譯錯誤
- 16. 錯誤類功能 - 恰恰1參數
- 17. C++錯誤 「太少參數的功能」
- 18. 功能錯誤的參數太少? (C++)
- 19. 抑制javascript lint錯誤
- 20. 如何抑制MySQL錯誤?
- 21. 使用fread抑制錯誤
- 22. jquery ready抑制錯誤
- 23. 抑制RestKit錯誤消息
- 24. 抑制MYSQL錯誤1452
- 25. 抑制Django mod_wsgi IO錯誤
- 26. 抑制Freemarker模板錯誤
- 27. 抑制rjava錯誤輸出
- 28. 抑制編譯器錯誤
- 29. Qt抑制數據庫錯誤
- 30. 奇怪的PHP錯誤:功能不承認自己的參數
在我看來,「邪惡」@符號比你的「更好的解決方案」更簡潔的代碼,因此不太可能引入錯誤。 – 2012-01-10 22:08:38
較短並不意味着更清潔。通過明確禁止某個特定代碼段的錯誤,可能會隱藏阻止代碼在別處工作的錯誤。有一些極少數情況下使用'@'是合法的(特別是'fopen()'),但它們很少。當然,使用它來抑制嘗試使用未定義變量的錯誤是*不正確的用法。就像'goto'辯論 - 有些情況下,他們的使用是可以接受的,甚至是好的,但大多數人不知道如何確定這一點,所以最好的方法是「不」。 – DaveRandom 2012-01-10 22:16:02
我認爲這不會是一個簡單的答案,只是我必須對'$ _POST'中的許多變量執行相同的驗證規則集合,而不是首先檢查isset,然後循環執行每個規則,這似乎是一種明智的方法,可以削減代碼數量,實現同樣的功能。出於興趣,當函數使用isset測試每個變量時,使用'@'會導致什麼樣的錯誤? – Olirav 2012-01-10 22:44:46