PHP 属性で関数が許可されない理由
属性のデフォルトで関数呼び出しを使用してクラス プロパティを初期化しようとすると、PHP構文エラーが発生します。この動作は直観に反しているように見えるかもしれませんが、コンパイラの特定の設計上の考慮事項に由来しています。
コンパイラ ワークフロー
表面的には、PHP のコンパイラは、通訳者の態度。これらのオペコードは、入力コードの解析中に作成されます。静的スカラーを使用したクラス プロパティ宣言の場合、コンパイラーは ADD_STATIC_ARRAY_ELEMENT オペコードの一部として値の配列を生成します。ただし、デフォルト値で関数呼び出しが導入されると、コンパイラは代わりに INIT_ARRAY オペコードを作成しますが、これは静的スカラー コンテキストでは無効です。
実行環境
さらに、属性の初期化中に関数呼び出しを評価する機能は、ランタイム環境に課題をもたらします。クラス定義と関数定義の早期バインディングは、PHP のコンパイル プロセスの重要な側面です。属性の初期化中に関数呼び出しを実行しようとすると、このバインディングに対して別のアプローチが必要となり、複雑さと同時実行性の問題が生じる可能性があります。
根拠
関数呼び出しを許可しない決定属性のデフォルトは、これらの実装上の課題に基づいている可能性があります。他の動的言語はこのシナリオに対応していますが、PHP のコンパイラと実行環境に大幅なアーキテクチャの変更が必要になります。
潜在的な解決策
属性のデフォルトで関数呼び出しを実装すると、実現可能であれば、新しいオペコードと慎重に設計された実行戦略が必要になります。 PHP 言語の設計者は、コンストラクターでの属性の初期化など、既存の実行可能な代替手段を考慮すると、この機能を優先度の高い機能とはみなしていなかった可能性があります。
以上がPHP 属性のデフォルトで関数が許可されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。