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

Духовность™

Продвинутый новичок
return из подфункций

PHP:
public function run()
{
    if (($results = $this->foo()) !== NULL) 
    {
        return $results;
    }
}

private function foo()
{
   return $value;
}
а никак низя отправить $value из метода foo() "напрямую" через 2 метода без проверки в run()? Типа как в break указав количество вложений? :rolleyes: :confused: :cool: :D
 

Духовность™

Продвинутый новичок
функция run() должна возвращать значение - разные объекты
функция foo - функция вспомогательная, так сказать, призвана уменьшить объем кода для читабельности. она так же может возвращать значение и если это значение, отличное от NULL, то это значение нужно отдать с помощью return из функции run()
 

Fortop

Новичок
Мона :D
PHP:
class Foo {
    public function run() {
        $this->foo();
    }
    private function foo() {
        $_GLOBALS['Foo_run_return'] = 'нате';
    }
}
 

Beavis

Banned
Автор оригинала: triumvirat
Beavis
плохо, что нельзя!
хорошо, что нельзя!

а то весело бы наверное было, если б у return можно было указывать, куда именно возвращать результат)))
например
PHP:
return $x to index.php:276
=)
 

zerkms

TDD infected
Команда форума
контрастный душ: адвансед фишки проектирования, на примере ТТУК и потом "ба" )))
 

Духовность™

Продвинутый новичок
у меня цепочка методов контроллеров, которые вызывают в себе родительские методы:

PHP:
class common extends base...

function run()
{
   parent::run(); // base::run()

   // return $value; может быть, например, здесь...
}


class concrete extends common...

function run()
{
   parent::run(); // common::run()

   // return $value; может быть так же здесь...
}

$result = concrete->run();

мне нужно, что бы в ситуации, когда любой из этих run()-методов возвращает значение, это значение отдавалось бы туда, откуда вызывается основной run-метод, т.е. в код

PHP:
$result = concrete->run();
в переменную $result
 

Духовность™

Продвинутый новичок
Затем, что run в родительских классах содержит код, который нужен для всех методов-потомков run в дочерних классах.
 

Духовность™

Продвинутый новичок
run в дочерних классах - это основной метод контроллера, рабочая лошадка, возвращающая _результат_.

run в родительских - обладает неким функционалом, который должен быть в run-e потомка. Но дело в том, что сейчас возникла ситуация, когда _результат_ может быть возвращен из parent::run и этот результат надо как-то отлавливать в дочерних классах
 

rotoZOOM

ACM maniac
Аналогию с рекурсией проведи. Ты же не можешь выскочить из более глубокого уровня сразу в нулевой (реализацию рекурсии через самопальный стек не рассматриваем). Здесь тоже самое.
 

dimagolov

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

Духовность™

Продвинутый новичок
dimagolov
нет!!! Никакого массива результатов!! Всё проще!!

Есть класс parent, есть класс child.

PHP:
class parent...

function common()
{
   // return $value; может быть здесь
   // а может и не быть
}


class child extends parent...

function run()
{
    parent::common();

   // return $value; может быть так же здесь...
}

$result = child->run();
проблема в том, что бы получить в переменную $result значение $value если оно отдается с помощью return из parent::common()

пока ЕДИНСТВЕННЫЙ выход это писать такую убогость сраную:

PHP:
class child extends parent...

function run()
{
    if ($result = parent::common())
    {
         return $result;
    }

   ...
}
 

Ramzes

Новичок
Автор оригинала: triumvirat
пока ЕДИНСТВЕННЫЙ выход это писать такую убогость сраную:

PHP:
class child extends parent...

function run()
{
    if ($result = parent::common())
    {
         return $result;
    }

   ...
}
используй конструктор и свойство
 
Сверху