preg_match_all

时间:2016-10-22 09:17:16

标签: hhvm

当未定义函数的参数/参数时,HHVM类型检查器会产生错误。

preg_match_all('/regex/', 'string', $matches)会在$matches Undefined variable: $matches上产生错误。

preg_match_all$matches参数填充为对象。

解决类似问题的先前方法是在调用函数之前设置$matches = null;或等效。但是,由于将使用foreach,我无法将该变量设置为null或object。

在HHVM中是否有解决此问题的标准?我没有在hhvm doc中看到任何解决方案。

请帮忙!

2 个答案:

答案 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) {
  ...
}