HHVM 3.9は、fun()
に渡されたとしても、名前付き関数を持つ3つのステートメントのファンではありませんが、≥ 3.10は完全に問題ありません。ハックは完全にファーストクラスの市民として機能していますか?
<?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 するという名前の関数は、具体的な機能だけでなく、他の機能(3v4l)に渡された名前の関数を受け入れることから返さ受け入れないので、これは、しかし、いくつかのケースの一つであるかのように思えます3.9および3.10? HHVM ≥ 3.10で名前付き関数をこのように参照して使用できない場合がありますか?
ああ、これは_PHP7_がwrtという名前の関数をサポートしているかどうかという疑問です。私は "Notice ... undefined constant"が "通常のPHP呼び出し可能形式"に変わった場合、なぜfunによって抑制されているのか不思議です。明確にするために:型エラーの外に、 'fun( 'foo')'と 'foo'が異なって解釈されるケースはありません。 – concat
タイプエラーは全体のポイントです。彼らは強調して型チェッカーで同じではありません。しかし、[実行時に、はい](https://github.com/facebook/hhvm/blob/cc7f35361e5dfc934631e1e19e2f2b9f66890391/hphp/system/php/lang/fun.ns.php#L31-L67)。編集:私がリンクしているコードのコメントはトップレベルにあるので、間違っていますが、[通常の公開ドキュメント](https://docs.hhvm.com/hack/callables/special-functions)は正しいです。 –