Pytanie dotyczy głównie tworzenia dynamicznie ładowanych wtyczek php w php, które nie powodują zakłóceń z innymi wtyczkami lub głównym kodem.
Jedyny znany mi sposób wymagałby przeprojektowania oryginalnej wersji class_lib.php i stworzenia klasy "Plugin", która działałaby jako klasa proxy, która na każdym wywołaniu funkcji/metody wykonałaby nową instancję php i przekazała argumenty funkcji z wywołaniem json_decode, a następnie echo odpowiedzi z 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);
}
to musiałyby być zrobione dla każdej funkcji/wywołania metody poprzez klasę proxy ... nie tak skuteczny, i nigdy nie będzie pracować dla obiektów/tablic asocjacyjnych, które posiadają odnośniki do zasobów lub innej zmiennej unserializable referencje.
Inną bardziej wydajną opcją byłaby http://www.php.net/runkit, która pozwala na interakcję z długo działającą wbudowaną instancją php.
Powinieneś wyjaśnić, co próbujesz osiągnąć, a dokładniej dlaczego. Możesz po prostu ponownie zainstalować obiekt z rozładowaniem i ponownym załadowaniem definicji klasy. – mario
Czy to przeładuje skrypt? – Rob
Dlaczego "nowa instancja MyClass()" nie działa? – lepe