依存関係を変更せずに内部で使用される PHP クラスを拡張する
P粉278379495
P粉278379495 2024-01-10 17:24:16
0
1
379

Laravel で PHP クラスをオーバーライドしたいのですが、このクラスは他のいくつかのクラスによって拡張されているため、面倒にはなりたくないのです。全体的な構造は次のとおりです

リーリー

ここで、A/B/C/D/R は外部パッケージ内のすべてのクラスです。

これらのファイルを変更せずに A/B/C/D を P に拡張したいと考えています (これはメンテナンスの負担になります)。したがって、P クラスは R を拡張します。 。したがって、P クラスに追加を行うことができます。

私はオートローダーに接続できるようにする class_alias() を調べてきました。これにより、クラス P が正しくロードされます。

私が使用したコードは次のとおりです:

リーリー リーリー

しかし、エラーが発生しました:

ErrorException: 名前はすでに使用されているため、クラス #R を宣言できません

クラスの完全なファイル内容がコピーされるのを防ぎながら、内部 PHP クラスを拡張できるソリューションを探しています。それができるかどうかさえ分かりません。拡張したいクラスは Laravel サービス コンテナに適合しないため、機能を追加するファーストパーティの方法はありません。

P粉278379495
P粉278379495

全員に返信(1)
P粉189606269

class_alias だけでは十分ではありません。P が R を拡張するには、両方のクラスが存在する必要があるからです。また、class_alias はオートロードとは何の関係もなく、2 つの名前を持つクラスを宣言するだけです。

実際に必要なのは、実際のクラス R を新しい名前で定義し、次に独自のクラスを R という名前で定義することです (実際には class_alias は必要ありません)。

1 つのアプローチは、以下に示すように、ターゲット クラスのソース コードを動的に書き換えてから、変更したコピーをロードすることです (未テスト)。 リーリー

重要なことに、これは、通常のオートローダーがクラスの定義を試みる前に実行する必要があります。たとえば、

$prepend オプションを true に設定して spl_autoload_register を使用できます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート