質問は本質的に他のプラグインやメインコードと干渉しない動的に読み込み可能なPHPプラグインをPHPで開発することです。
私が知っている唯一の方法は、元のclass_lib.phpを再設計し、すべての関数/メソッド呼び出しで新しいPHPインスタンスを実行して渡すプロキシクラスとして動作する 'Plugin'クラスを作成することです関数の引数にjson_decodeを呼び出し、json_encodeで応答をエコーします。
function proxyExternalFunction($fileName, $functionName, $args, $setupStatements = '') {
$output = array();
$command = $setupStatements.";include('".addslashes($fileName)."');echo json_encode(".$functionName."(";
foreach ($args as $arg) {
$command .= "json_decode('".json_encode($arg)."',true),";
}
if (count($args) > 0) {
$command[strlen($command)-1] = ")";//end of $functionName
}
$command .= ");";//end of json_encode
$command = "php -r ".escapeshellarg($command);
exec($command, $output);
$output = json_decode($output,true);
}
これはそれほど効率的ではないプロキシクラスを経由してすべての単一の関数/メソッド呼び出し...のために行わなければならない、そしてそれは、リソースまたは他のunserializable変数への参照を保持するオブジェクト/連想配列のために働くことはありません参照。
さらに効率的なオプションはhttp://www.php.net/runkitで、長時間実行されている埋め込みPHPインスタンスとやりとりすることができます。
達成しようとしていること、具体的には理由を説明する必要があります。クラス定義をアンロードして再ロードするだけで、オブジェクトを再インスタンス化できます。 – mario
それはスクリプトをリロードしますか? – Rob
「新しいMyClass()」インスタンスが機能しないのはなぜですか? – lepe