Laravel で PHP クラスをオーバーライドしたいのですが、このクラスは他のいくつかのクラスによって拡張されているため、面倒にはなりたくないのです。全体的な構造は次のとおりです
リーリーここで、A/B/C/D/R は外部パッケージ内のすべてのクラスです。
これらのファイルを変更せずに A/B/C/D を P
に拡張したいと考えています (これはメンテナンスの負担になります)。したがって、P クラスは R
を拡張します。 。したがって、P
クラスに追加を行うことができます。
私はオートローダーに接続できるようにする class_alias()
を調べてきました。これにより、クラス P
が正しくロードされます。
私が使用したコードは次のとおりです:
リーリー リーリーしかし、エラーが発生しました:
ErrorException: 名前はすでに使用されているため、クラス
#R
を宣言できません
クラスの完全なファイル内容がコピーされるのを防ぎながら、内部 PHP クラスを拡張できるソリューションを探しています。それができるかどうかさえ分かりません。拡張したいクラスは Laravel サービス コンテナに適合しないため、機能を追加するファーストパーティの方法はありません。
class_alias だけでは十分ではありません。P が R を拡張するには、両方のクラスが存在する必要があるからです。また、class_alias はオートロードとは何の関係もなく、2 つの名前を持つクラスを宣言するだけです。
実際に必要なのは、実際のクラス R を新しい名前で定義し、次に独自のクラスを R という名前で定義することです (実際には class_alias は必要ありません)。
1 つのアプローチは、以下に示すように、ターゲット クラスのソース コードを動的に書き換えてから、変更したコピーをロードすることです (未テスト)。 リーリー
重要なことに、これは、通常のオートローダーがクラスの定義を試みる前に実行する必要があります。たとえば、$prepend オプションを true
に設定して
spl_autoload_register
を使用できます。