引申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. flex4与PHP,错误参考功能
- 2. PHP错误抑制被忽略
- 3. 在php中查看@抑制错误
- 4. PhP错误:功能
- 5. 抑制控制台错误
- 6. 如何抑制无效函数参数错误?
- 7. 错误功能太多参数
- 8. 错误:功能参数太多
- 9. 功能错误的参数太少? (C++)
- 10. 错误类功能 - 恰恰1参数
- 11. 瓶 - 错误有两个参数功能,
- 12. 抑制MYSQL错误1452
- 13. 抑制javascript lint错误
- 14. jquery ready抑制错误
- 15. 抑制Django mod_wsgi IO错误
- 16. 使用fread抑制错误
- 17. Qt抑制数据库错误
- 18. 奇怪的PHP错误:功能不承认自己的参数
- 19. PHP PDF功能错误
- 20. PHP - filemtime功能错误
- 21. 参数错误PHP
- 22. 错误执行代码:错误的参数类型,功能
- 23. 在PHP中,如果没有错误发生,抑制函数的错误输出(通过@)会影响性能?
- 24. 如何在函数调用中缺少参数时抑制错误?
- 25. 抑制Firefox错误控制台中的“过滤器”错误?
- 26. 错误抑制@无法正常工作
- 27. 如何抑制mysql错误java
- 28. PowerShell从`$ Error`中抑制特定错误
- 29. 在Eclipse中抑制XML DTD错误
- 30. Stylecop为Reference.cs文件抑制错误
在我看来,“邪恶”@符号比你的“更好的解决方案”更简洁的代码,因此不太可能引入错误。 – 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