2011-05-01 12 views
1

我有一个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 
} 
+0

如果你只是将代码放在从'session'派生的类中,或者在'session'本身中,如果它适合那里并从那个派生出来呢?这可能会更慢,但避免重复。 – Archimedix 2011-05-01 15:31:36

+0

实际的SSO代码只是调用一个创建用户类实例的文件。我需要那个类实例。但我只需要将实际的类称为不同的名称,以免重新定义错误。 – 2011-05-01 17:03:58

回答

1

这是一个黑客,但你可以有一个基类,凡事如果定义。然后,您只需扩展该类的空子类,从而更改其名称,而不必保留重复的代码。

class __user extends session { 
    // user class code 
} 

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

虽然我很想看到更好的解决方案。

+0

这工作得很好,并允许最小的代码更改。 – 2011-05-01 17:05:29

+0

这就是我说的... – Archimedix 2011-05-02 14:53:17

相关问题