を動的クラスをアンロードします。は、私は次のようにプラグインの動的ロードを実装PHP
function processPlugin($plgFile, $db) {
require_once($plgFile);
$plgin = new PlginImpl();
$plgin->setDb($db);
$ret = $plgin->process();
return $ret;
}
を各プラグインが正常に動作しますPlginImpl
という名前のクラスを定義します。しかし、戻り値process()
の範囲内で指定されたプラグインをさらに呼び出すことは可能です。すなわち、上記指定された同じメソッドを呼び出して、しかしで失敗するであろう:
Fatal error: Cannot redeclare class PlginImpl in ..
すなわち、各プラグインがクラスであることに注意してください:
class PlginImpl extends Plugin implements PluginInterface
Plugin
提供いくつかの有用な機能をPluginInterface
、すなわちprocess()
を画定します。
私は、すべてのプラグインの名前がPlginImplであるということは、問題を引き起こします。したがって、私の質問は:require_once
をロードした後にクラス(PlginImpl
)をアンロードする方法はありますか?あるいは、私が従うべき全く異なるアプローチがありますか?
EDIT 私は次の事を続くせずに試してみました:
- 解除
$plgin
__destruct()
を呼び出す
process()
後 - それは
processPlugin()
内でも
process
方法
とても感謝しています!その後、
一時VARに保存されているあなたはplgun-> process()メソッドは、あなたが$ plgin->プロセス(の結果を持っている可能性が http://ca.php.net/manual/en/language.oop5.decon.phpそれとも
デコンストラクタを呼び出した時に見えるかもしれません
上述したように私が解除使用しようとしたが、それだけPlginImplのインスタンスをアンロードするが、定義がメモリ(第2ランfailes)に留まります。デコンストラクタも動作しません。 – MrG