可以动态设置类的名称吗?

时间:2011-05-01 15:27:24

标签: php class mediawiki phpbb

我有一个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 个答案:

答案 0 :(得分:1)

这有点像黑客攻击,但你可以拥有一个基类,如果定义了所有内容。然后,您只需从该类扩展空子类,从而更改其名称,而无需保留重复的代码。

class __user extends session {
    // user class code
}

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

我很乐意看到更好的解决方案。