2016-12-10 9 views
0

PHPでは、親サイト内でどの子サイトが選択されているかに基づいてオートローダーを設定する機能があります。PHP - 自動ロードと宣言されたクラスをリセットする

オートローダーのリセットは、spl_autoload_unregister機能で優れています。

しかし、私が気づくのは、子サイトの前にすでに開始されていたクラスファイルをロードするときに、オートローダーをリセットした後でもこの '古い'クラスファイルが使用されていることです。

例:

親サイトの負荷

c:\parent\site\RouterClassからexample\namespace\RouterClassその後、私はすべて自動ローダーをリセットし、子サイトを開始し、子サイトの正しい自動ローダーを設定します。

子サイトはexample\namespace\RouterClassをロードしますが、このファイルを新しいオートローダー経由でc:\child\site\RouterClassから取得する代わりに、親サイトで定義された古いファイルからクラスを取得します。

私は機能を経由して登録されたクラスを参照してください。

get_declared_classes() 

をしかし、私は、この変数リストをリセットすることはできませんよ。このクラスキャッシュのリセットが可能な場合、PHPはRouterClassの新しい検索を開始し、子サイトの自動ローダーをチェックして見つけます。

runkit_method_redefineの第2のオプションをチェックしましたが、runkit_class_redefineのようなクラスでは類似の機能はありません。

宣言されたクラスリストをリセットする方法を知っている人はいますか?または、子サイトのすべての名前空間の名前を変更せずに上記を達成する方法。

+0

あなたにはファイルが1つ含まれています。そのファイルは含まれています(duh)。あなたは何をする必要があり、なぜですか? – Federkun

+0

これで、コード内のコンテキストから変更し、フレームワークv1の1つのコンテキストとフレームワークv2の他のコンテキストで作業できます。 – PeterH

答えて

1

できません。ひとたびクラスが宣言されると、そこには良いことがあります。

オートローダーを動的に定義する必要がある場合は、影響を受けるクラスがロードされる前に実行する必要があります。

関連する問題