PHP классы - лучшая альтернатива $ this-> base-> class-> method - PullRequest
1 голос
/ 27 декабря 2011

На данный момент у меня есть основной класс 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();
    }

}

Есть ли лучший способ получить доступ к этим другим классам?

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Возможно, 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();
    }

}
1 голос
/ 27 декабря 2011

Похоже, Base является реализацией шаблона Front Controller .Фронт-контроллер - это особый случай Mediator , который делает именно то, что вы делаете.По существу, это позволяет SomeClass и AnotherClass разрабатываться и обслуживаться отдельно с меньшим количеством зависимостей.

Однако вместо непосредственного доступа к классам из класса Base лучше всего иметь SomeClassи AnotherClass регистрируются в классе Base и предоставляют методы получения, которые другие объекты вызывают:

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...