Как я могу вызвать родительский метод из экземпляра класса? - PullRequest
0 голосов
/ 20 апреля 2011

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

Есть ли способ, с помощью которого я могу ссылаться на мой метод addError из родительского классакоторый создал экземпляр вспомогательного класса, прямо из метода самого вспомогательного класса?

например,

class baseview {
    ...
    public function addError($message) {
        ...
    }
    ...
}

class pageview extends baseview {
    ...
    $helper = new helper();
   ...
}

class helper {
    ...
    public function myFunction($var) {
        if( $var ) { ... }
        else { theClassThatInstantiatedMe::addError('Error Message') }
    }
    ...
}

~ ИЛИ

Может кто-нибудь предложитьлучший способ структурировать мою систему, чтобы лучше справляться с такой ситуацией?

Ответы [ 3 ]

2 голосов
/ 20 апреля 2011

2 простых решения:

Сохранение родительского класса в классе помощника:

class pageview extends baseview {
    ...
    $helper = new helper($this);
   ...
}

class helper {
    function __construct($parent)
    {
        $this->_parent=$parent;
    }
    ...
    $this->_parent->addError("...");
}

В противном случае сделайте функцию addError общедоступной и статической, чтобы ее можно было вызывать в классе помощника.без сохранения родительского экземпляра класса:

class baseview {
    ...
    static public function addError($message) {
        ...
    }
    ...
}

class helper{
     ...
     baseview::addError("...");
}
0 голосов
/ 20 апреля 2011

Если вы хотите чистый код, вы должны разделить проводку (создание объекта) и логику.

Вот THE pdf, все кодировщики должны прочитать хотя бы один раз: Написание тестируемого кода

Это PDF-файл, найденный в блоге Миско Хевери (евангелист "чистого кода" Google).

Если вы предпочитаете видео, вы можете проверить следующее: Конференции Миско в Google

0 голосов
/ 20 апреля 2011

Из вашего примера я бы предположил, что вы подразумевали универсальное использование baseview, и поэтому "baseview :: addError ('Error Message');"

Но из текста я понимаю, что могут быть разные классы. В этом случае вам нужно будет передать в помощник ссылку на создающий класс, например:

class pageview extends baseview {
...
$helper = new helper($this);

... }

помощник класса { защищенный $ создатель; ... публичная функция myFunction ($ creator, $ var) {

    $this->creator = $creator;
    if( $var ) { ... }
    else { $creator->addError('Error Message') }
}
...

}

...