PHP 属性で関数が許可されない理由
PHP では、属性のデフォルト値にクラス宣言内の関数呼び出しを含めることはできません。この制限により、その理由についての調査が行われています。
設計の観点
PHP コンパイラーの設計は、この制限において重要な役割を果たしています。クラス変数宣言を解析するとき、文法は有効な値として静的スカラーまたは静的スカラーの配列を想定します。
属性内での関数呼び出しに対応するように文法を変更すると構文エラーがなくなる可能性がありますが、コンパイル中に新たな問題が発生する可能性があります。コンパイラは、クラス宣言中にオペコードの配列を生成することによって動作します。関数呼び出しの結果などの非静的な値は、予期されるオペコード シーケンスを変更することによってこのプロセスを中断します。
構造上の制限
これを修正するには、コンパイラは、クラス変数宣言のみをスコープとする新しいオペコード配列を必要とします。ただし、このスコープ付き配列を評価するための適切なタイムマシンを決定するには、別の課題が生じます:
実装の課題
他の動的言語はこれらの障害を克服していますが、PHP でこれを行うには大幅な再構築が必要になります。言語設計者はこれまでのところ、明確な利点がなければかなりの労力を必要とするため、これは優先度が低いと考えています。
結論
関数呼び出しの制限PHP の属性のデフォルト値は、コンパイラの設計と、この機能を既存の構造内に実装する実際的な難しさの結果です。
以上がPHP で関数呼び出しが属性のデフォルト値として許可されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。