Возможно ли динамически установить имя класса? - PullRequest
1 голос
/ 01 мая 2011

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

1 голос
/ 01 мая 2011

Это что-то вроде хака, но у вас может быть базовый класс, где все, если определено. Затем вы просто расширяете пустые подклассы из этого класса, таким образом изменяя его имя, не сохраняя дублирующийся код.

class __user extends session {
    // user class code
}

if (!defined('FROM_MEDIAWIKI')){
    class User extends __user {}
}else{
    class phpbb_user extends __user {}
}

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

...