引申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