PHP 8.1 関数 (カテゴリ名など) を使用して名前空間のエイリアスを作成できますか?
Company のデフォルトの名前空間モジュールに「Subcompany」という名前を付けましたが、用途が拡大したため、これを「Company」にしたいと考えています。
完璧な答えは、オーバーヘッドをできる限り少なくし、透過的な自動読み込みを可能にすることです。 1 つの問題は、Intelephense のようなツールがこのエイリアスを理解することです。
このプロジェクトでは Composer も使用しているため、Composer を使用して名前空間を書き換えるという答えも機能します。
P粉6137352892024-01-17 11:10:42
はい、そう考えてください: class_alias
は、新しい名前空間言語機能を備えた PHP 5.3 で導入されました。これは、グローバル名前空間から名前空間への移行を容易にするために作成されました。実際、 は名前空間の間にあります。
ただし、最初に、古いクラス/インターフェイス/特性/列挙のそれぞれのカテゴリ名を新しい対応物に登録する必要があります。
リーリー古いライブラリは消滅し、現在は新しい Tiger ライブラリが存在します。すべてのクラスなどは、名前空間プレフィックスを交換することでマッピングできます ('My\Old\Lib\Name\' -> 'My\Tiger\Lib\Name'
)。
PHP がほとんどの作業を行うため、これは実行時に行うことができます。
古い名前空間プレフィックスに基づいて新しい名前空間プレフィックスをロードし、カテゴリ名に古い名前をプレフィックスとして付けるオートローダーを登録します。
###例:### リーリーこのコードは非常に単純で、登録パラメータに関する 2 つの説明だけです:
の部分です:
リーリー
新しいクラスがまだロードされていない場合は、自動ロードがトリガーされます。
オートローダーを登録した後、古いコードは古いエイリアスの下で新しいクラスを自動的にロードします。
リーリー