国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

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

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

リーリー

ここで、A/B/C/D/R は外部パッケージ內(nèi)のすべてのクラスです。

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

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

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

リーリー リーリー

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

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

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

P粉278379495
P粉278379495

全員に返信(1)
P粉189606269

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

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

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

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

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

最新のダウンロード
詳細(xì)>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート