関数呼び出しの結果を式に変換する括弧
PHP では、関数呼び出しの結果を括弧で囲むと、驚くべきことに結果を式に変換できます。次の例に示すように、
<?php function get_array() { return array(); } function foo() { return reset((get_array())); } foo();
上記のコードはエラーなしで動作しますが、ドキュメントには明確な説明がありません。この動作を詳しく調べてみましょう。
最初の条件: 関数呼び出し以外の引数
かっこが追加されたため、PHP は引数を関数呼び出しとして識別しなくなりました。 「expr_without_variable」として。この解析の変更はコードのコンパイル方法に影響し、最終的には「SEND_VAR_NO_REF」オペコードから「関数呼び出し」フラグを削除します。
第 2 条件: 参照カウント 1
Zend Engine では、参照が期待される場所で、参照カウント 1 の非参照が許可されることがあります。この例では、返された配列の参照カウントは 1 であり、この条件を満たしています。ただし、配列が他の場所から参照されている場合は、2 番目の条件が満たされず、エラーが発生します。
結論
この動作は便利に見えるかもしれませんが、実際はそうではありません。これは文書化された機能ではないため、バグの可能性として扱う必要があることに注意することが重要です。これに依存すると、コードに予期しないエラーや不安定性が発生する可能性があります。したがって、曖昧さを避け、予測可能な結果を保証するために、この構文を避け、代わりに正しい式を使用することを強くお勧めします。
以上が関数呼び出しを括弧で囲むと、PHP の式に変換されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。