return из подфункций

weregod

unserializer
вообще кошерно ли использовать parent::commnon() из неодноимённого метода run()?
 

Fortop

Новичок
triumvirat
возвращай результат из метода ВСЕГДА.
null или что-то другое - всеравно возвращай.

тогда и будет
PHP:
class child extends father {
    public function run() {
        return parent::common();
    }
}
 

Духовность™

Продвинутый новичок
Fortop
ну типо того. дело в том, что return из child::run нужно делать только когда результат отличный от null. Соответственно у меня говнокод говнокодится:

PHP:
class child extends parent
{
    public function run()
    {
        if ($result = parent::common())
        {
            return $result;
        }

        if ($result = $this->init())
        {
            return $result;
        }

         // логика этого контроллера 

         return $this->getView(); // тоже "результат"
такую уж я архитектуру сделал..
 

Fortop

Новичок
return из child::run нужно делать только когда результат отличный от null
возвращай его всегда!

Как ты полагаешь, что записывается в
PHP:
$result = $MyClass->run();
когда мы не возвращаем результат?

-~{}~ 05.05.10 19:47:

P.S. Можно уточнить, что мы получаем из $this->getView();
и что из $this->init() и parent::common() ?
 

Духовность™

Продвинутый новичок
возвращай его всегда
если я буду делать всегда return из child::run то логика, стоящая после
PHP:
return parent::common();
просто не сработает.

ладно, я думаю пора закрыть обсуждение, я думаю, надо мне просто подход изменить.

-~{}~ 05.05.10 20:54:

P.S. Можно уточнить, что мы получаем из $this->getView();
и что из $this->init() и parent::common() ?
да. я видимо ошибся в проектировании.

$this->getView() возвращает объект View, который потом делает view->run() и получается HTML для вывода.

$this->init() и parent::common() _могут_ возвратить объект редиректа, в случае ошибки, например.

И объект view и объект редиректа называются у меня РЕЗУЛЬТАТОМ.

Вот код апликейшена:

PHP:
// ... 

$controller = new $controller_name();
$result = $controller->run();

if (is_object($result))
{
    if ($result instanceof Base_View) // Это вид 
    {
         // .... 
         $result->run(); // формируем HTML 
         $this->response->sendHeaders(); // отсылаем HTTP-заголовки 
         echo $result->getOut(); // выводим HTML 
    }
    else if ($result instanceof Redirect_Redirect) // это объект редиректа
    {
        $result->run(); // формируем URL для редиректа и др.
        $this->response->setHeader('Location', $result->getRedirectUrl()); // устанавливаем заголовок
        $this->response->sendHeaders(); // отсылаем заголовки
    }
}
else // тут фатальная ошибка 
{
    throw new Exception('нет результата');
}
-~{}~ 05.05.10 20:58:

теперь я думаю, что редирект надо делать в контроллере, а не в аппликейшене. соответственно, проблема у меня отпадет сама по себе, ибо $this->init() и parent::common() не будут возвращать никаких результатов.
 
Сверху