Можно ли динамически устанавливать имя класса?
У меня установлена программа mediawiki и phpbb, в которую я успешно интегрировал единый вход.
Проблема заключалась в том, что у них обоих был пользовательский класс, поэтому в mediawiki, когда я вызывал phpbb, это приводило к ошибке обновления класса.
Я справился с этим, проверив, загружается ли файл в MediaWiki. Если это так, вместо этого он вызывает полную копию пользовательского класса phpbb_user. Но мне интересно, есть ли лучший способ. Вот как это работает в настоящее время
if (!defined('FROM_MEDIAWIKI')){
class User extends session{
//user class code
}
}else{
class phpbb_user extends session{
//exact copy of user class code
}
}
Есть ли лучший способ сделать это, не требуя 2 копии пользовательского класса?
Я знаю, что вы не можете сделать это, но можете ли вы сделать что-то подобное?
$className = (defined('FROM_MEDIAWIKI'))? 'phpbb_user' : 'User';
class $className extends session{
//user class code
}
1 ответ
Это что-то вроде хака, но у вас может быть базовый класс, где все, если определено. Затем вы просто расширяете пустые подклассы из этого класса, таким образом, изменяя его имя без необходимости дублирования кода.
class __user extends session {
// user class code
}
if (!defined('FROM_MEDIAWIKI')){
class User extends __user {}
}else{
class phpbb_user extends __user {}
}
Хотелось бы увидеть лучшее решение.