HHVM 3.9 不喜欢带有命名函数的三元语句,即使通过fun()
, 但 ≥3.10 对它们完全没问题。然而,这似乎是少数情况之一,因为 3.9确实接受从具体函数返回的命名函数,以及接受传递给其他函数 ( 3v4l ) 的命名函数:
<?hh
echo ((() ==> fun('strlen'))())('Hello'); // 5
echo (($f, $v) ==> $f($v))(strlen, 'Hello'); // 5 + Notice: Use of undefined constant strlen - assumed 'strlen'
echo (true ? strlen : intval)('100'); // Fatal error: syntax error, unexpected '(', expecting ',' or ';' on line 3
3.9 和 3.10 之间发生了什么变化?在 HHVM ≥3.10 中是否存在无法以这种方式引用和使用命名函数的情况?