関数呼び出し結果のセマンティクスを変更する括弧
PHP では、関数呼び出しの結果を括弧で囲むとセマンティクスが変更され、式が有効になります。そうしないとエラーが発生します。この動作に関する明示的なドキュメントがないと、その動作方法を理解するのが混乱する可能性があります。
この動作は、Zend Engine の解析ロジックに起因します。 PHP は空ではない関数引数リストを検出すると、それを 3 つの可能性のいずれかに分類します。変数のない式、変数、または参照によって渡された変数です。
関数呼び出しの前後に括弧を追加することで、引数は関数呼び出しとして解釈されなくなります。これにより、コードのコンパイルに使用されるオペコードが変更され、関数呼び出しを示すフラグが削除されます。
さらに、Zend エンジンでは、特定の状況で参照カウント 1 の非参照を参照として扱うことができます。この例では、get_array() によって返される配列の参照カウントは 1 であり、この条件を満たします。
したがって、括弧により関数呼び出しがそのように検出されなくなり、戻り値が処理されます。カウントが 1 の参照として、式reset((get_array())) が意図したとおりに動作できるようにします。
ただし、この動作はバグとみなされ、依存すべきではないことに注意することが重要です。 。 PHP 文法の EBNF 表現ではこの動作について明示的に言及されていないため、これに依存すると予期しない結果が生じる可能性があります。
以上が括弧によって PHP の関数呼び出しのセマンティクスが変わるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。