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

Erweitern Sie intern verwendete PHP-Klassen, ohne Abh?ngigkeiten zu ?ndern
P粉278379495
P粉278379495 2024-01-10 17:24:16
0
1
511

Ich m?chte eine PHP-Klasse in Laravel überschreiben, aber sie wird um mehrere andere Klassen erweitert, mit denen ich mich nicht befassen m?chte. Die Gesamtstruktur ist wie folgt

class A extends R { }
class B extends R { }
class C extends R { }
class D extends R { }

Wobei A/B/C/D/R alle Klassen im externen Paket sind.

Ich m?chte die Klasse A/B/C/D um P 而不更改任何這些文件(這將成為維護負(fù)擔(dān)),這樣 P 類擴展了 R。因此,我可以對 P erg?nzen.

Ich habe recherchiertclass_alias(),它允許我連接到自動加載器。這會正確加載類 P.

Der Code, den ich verwendet habe, ist:

// Some bootstrap file:
class_alias(
    P::class,
    R::class
);
// My modification:
class P extends R
{
    // ...
}

Aber ich habe den Fehler erhalten:

ErrorException: Klasse kann nicht deklariert werden R, da der Name bereits verwendet wird

Ich suche nach einer L?sung, die eine innere PHP-Klasse erweitern und gleichzeitig verhindern kann, dass der gesamte Dateiinhalt der Klasse kopiert wird. Ich wei? nicht einmal, ob es machbar ist. Die Klasse, die ich erweitern m?chte, passt nicht in den Laravel-Servicecontainer, daher gibt es keine Erstanbieter-M?glichkeit, Funktionalit?t hinzuzufügen.

P粉278379495
P粉278379495

Antworte allen(1)
P粉189606269

class_alias 本身還不夠,因為為了讓 P 擴展 R,兩個類都必須存在。而class_alias與自動加載無關(guān),它只是聲明一個具有兩個名稱的類。

您實際需要的是使用新名稱定義真正的類 R,然后使用名稱 R 定義您自己的類(您實際上不需要 class_alias)。

一種方法是動態(tài)重寫目標(biāo)類的源代碼,然后加載修改后的副本,如下所示(未經(jīng)測試):

$code = file_get_contents(__DIR__ . '/vendor/path/to/R.php');
$code = str_replace('class R', 'class R_original', $code);
eval($code);

class R extends R_original {
   // Your code here
}

重要的是,這需要在普通自動加載器嘗試定義類之前運行。例如,您可以使用 spl_autoload_register,其中 $prepend 選項設(shè)置為 true。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage