Можно ли динамически устанавливать имя класса?

У меня установлена ​​программа 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 {}
}

Хотелось бы увидеть лучшее решение.

Другие вопросы по тегам