目前,我有一个主类Base
加载所有其他控制器和模型,然后由Base
加载的每个类都具有类似的结构:
class SomeClass {
private $base;
function __construct(&$base) {
$this->base = $base;
}
function SomeMethod() { }
}
然后另一个类必须使用:
class AnotherClass {
private $base;
function __construct(&$base) {
$this->base = $base;
$this->base->SomeClass->SomeMethod();
}
}
有没有更好的方法来访问这些其他类?
答案 0 :(得分:1)
听起来Base
是Front Controller pattern的实现。前端控制器是Mediator的一个特例,它完全符合您的要求。它基本上允许SomeClass
和AnotherClass
分别开发和维护,具有更少的依赖性。
但是,不是直接从Base
类访问类,最好让SomeClass
和AnotherClass
在Base
类中注册,并公开其他对象调用的getter方法:
class Base {
protected $_authenticator;
public function setAuthenticator(Authenticator $auth) {
$this->_authenticator = $auth;
}
public function getAuthenticator() {
return $this->_authenticator;
}
}
class Authenticator {
protected $_base;
public function __construct(Base $base) {
$this->_base = $base;
$this->_base->setAuthenticator($this);
}
}
答案 1 :(得分:1)
也许someMethod()可能是静态的:
class SomeClass {
private $base;
function __construct(&$base) {
$this->base = $base;
}
public static function SomeMethod() { }
}
然后只是:
class AnotherClass {
private $base;
function __construct(&$base) {
$this->base = $base;
SomeClass::SomeMethod();
}
}