PHP で関数呼び出しが属性のデフォルト値として許可されないのはなぜですか?

DDD
リリース: 2024-10-17 20:31:03
オリジナル
328 人が閲覧しました

Why Function Calls Are Not Allowed as Attribute Default Values in PHP?

PHP 属性で関数が許可されない理由

PHP では、属性のデフォルト値にクラス宣言内の関数呼び出しを含めることはできません。この制限により、その理由についての調査が行われています。

設計の観点

PHP コンパイラーの設計は、この制限において重要な役割を果たしています。クラス変数宣言を解析するとき、文法は有効な値として静的スカラーまたは静的スカラーの配列を想定します。

属性内での関数呼び出しに対応するように文法を変更すると構文エラーがなくなる可能性がありますが、コンパイル中に新たな問題が発生する可能性があります。コンパイラは、クラス宣言中にオペコードの配列を生成することによって動作します。関数呼び出しの結果などの非静的な値は、予期されるオペコード シーケンスを変更することによってこのプロセスを中断します。

構造上の制限

これを修正するには、コンパイラは、クラス変数宣言のみをスコープとする新しいオペコード配列を必要とします。ただし、このスコープ付き配列を評価するための適切なタイムマシンを決定するには、別の課題が生じます:

  • ファイルの読み込み: この時点では関数は使用できない可能性があります。
  • プロパティ アクセス: プロパティ アクセスができるまで評価を遅らせると、オブジェクトの作成が妨げられます。
  • オブジェクトの構築: 構築時に評価する方が賢明ですが、それでも循環参照に関する問題が発生します。

実装の課題

他の動的言語はこれらの障害を克服していますが、PHP でこれを行うには大幅な再構築が必要になります。言語設計者はこれまでのところ、明確な利点がなければかなりの労力を必要とするため、これは優先度が低いと考えています。

結論

関数呼び出しの制限PHP の属性のデフォルト値は、コンパイラの設計と、この機能を既存の構造内に実装する実際的な難しさの結果です。

以上がPHP で関数呼び出しが属性のデフォルト値として許可されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!