Беглый взгляд на ваше приложение заставляет меня поверить, что вам лучше всего использовать базовый класс, как предложено в комментарии выше.
Что-то в пределах:
class IRCModule {
private static $module_dir = ''; //put your module directory here w/o trailing slash
public static function getModule( $module ) {
//if the module directory doesn't exist, don't do anything
if( !is_dir( self::$module_dir.DIRECTORY_SEPARATOR.$module ) ) return false;
//load the module file
$fname = scandir(self::$module_dir.DIRECTORY_SEPARATOR.$module);
$fname = $fname[2]; //first 2 elements will be . and ..
require_once( self::$module_dir.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$fname );
$className = str_replace('.class.php',NULL,$fname);
return new $className();
}
}
Затем вы расширили бы это, используя ваши модули.Это позволит вам перезаписать модуль, просто удалив его старый файл /my/module/dir/moduleName/moduleNameV1.0.class.php и заменив его новой версией /my/module/dir/moduleName/moduleNameV1.1.class.php
Как уже упоминалось в комментариях, это в конечном итоге заполнит память на сервере, поэтому вы должны планировать перезагрузку службы каждый раз, когда вы вносите существенные изменения, но также позволяет загружать новые версии.по требованию, без остановки службы.
Более стабильный подход заключается в использовании преимуществ управления процессами и выделении демонов для каждого соединения из родительского сценария или реализации системы кэширования, которая хранит все данные на диске /базы данных, так что вы можете обнаружить изменение в версии модуля и мгновенно перезагрузить сервер.Но вышеприведенное решение должно работать для вас:)