当未定义函数的参数/参数时,HHVM类型检查器会产生错误。
preg_match_all('/regex/', 'string', $matches)
会在$matches
Undefined variable: $matches
上产生错误。
preg_match_all
将$matches
参数填充为对象。
解决类似问题的先前方法是在调用函数之前设置$matches = null;
或等效。但是,由于将使用foreach
,我无法将该变量设置为null或object。
在HHVM中是否有解决此问题的标准?我没有在hhvm doc中看到任何解决方案。
请帮忙!
答案 0 :(得分:0)
设置$matches = null
是我用过的常用解决方案。
解决类似问题的先前方法是在调用函数之前设置
$matches = null;
或等效。但是,由于将使用foreach
,我无法将该变量设置为null或object。
除非我误解,否则你可以在循环之外将它设置为null - 类型检查器只关心它是在正确的范围内定义的。例如,
$matches = null;
foreach ($foo as $bar) {
preg_match_all('/regex/', 'string', $matches);
}
另一种选择是使用HH_IGNORE_ERROR
。你从未定义的$matches
得到的错误应该有一个错误代码 - 我没有在我面前,但假设错误代码是4321,你可以这样做:
foreach ($foo as $bar) {
/* HH_IGNORE_ERROR[4321] Write some comment here */
preg_match_all('/regex/', 'string', $matches);
}
我认为将变量设置为null可以更清晰,更清晰。
答案 1 :(得分:0)
由于$matches
将填充数组而不是对象,因此您也可以将其设置为空数组。
$matches = [];
preg_match_all('/regex/', 'string', $matches);
foreach ($matches as $match) {
...
}