Пишу класс, который вызывает кучу собственных функций.
Т.е. Создаем экземпляр класса, вызываем функцию, и передаем в ней переменную.
После чего функция анализирует переменную и в зависимости от результата, вызывает приватные функции своего экземпляра.
Мне нужно сделать прерывание в функциях.
Т.е. Хочу в цикле вызывать функцию запуска обработки переменной, но если в классе написать die() или exit() ведь весь скрипт умрет. И цикл соответственно.
А нужно несколько остановить рекурсию в функции по достижению желаемого результата.
З.Ы. Рекурсия в классе тоже возможно, поскольку в определенный момент эта же функция вызывает сама себя для нового запуска изнутри класса, а не снаружи.
Т.е. сейчас делаю так:
if($a > 0) {
if($b < 1) {
return $this->rumFunc2();
} else {
return $this->rumFunc1();
}
} else {
return $this->rumFunc1();
}
На сколько это верно? Ведь лучше сделать так:
if($a > 0 && $b < 1) {
return $this->rumFunc2();
}
return $this->rumFunc1();
Return в классе работает так же, как и в стандартных функция?
Или для "прерывания" нужно как то по другому это делать?
Спустя 3 часа, 14 минут, 17 секунд (22.07.2012 - 17:22) kamanch написал(а):
return работает не в классе, а в методах класса.
Метод - таже самая функия, и return'ну все равно, где он стоит.
После того, как php встречает return, то он передает управление в то место, где была вызвана функция (метод)
А раз у тебя рекурсия, то, наткнувшись на return ты не завершишь работу всего метода, а выйдешь только на уровень выше в иерархии рекурсии.
Следоваетльно, если тебе нужно полностью завершить метод, то логика его рекурсии должна быть таковой, чтобы метод прошелся по цепочке return'ов вверх.
Метод - таже самая функия, и return'ну все равно, где он стоит.
После того, как php встречает return, то он передает управление в то место, где была вызвана функция (метод)
А раз у тебя рекурсия, то, наткнувшись на return ты не завершишь работу всего метода, а выйдешь только на уровень выше в иерархии рекурсии.
Следоваетльно, если тебе нужно полностью завершить метод, то логика его рекурсии должна быть таковой, чтобы метод прошелся по цепочке return'ов вверх.
Спустя 1 минута, 59 секунд (22.07.2012 - 17:24) vagrand написал(а):
return работает точно так же как и в функциях. Ретурна хватит для ваших целей.
Спустя 6 минут, 53 секунды (22.07.2012 - 17:31) Quieteroks написал(а):
h.n.81
Ну да, каждый метод возвращает результат обработки.
И каждый метод вызываю с return ом.
Так что рекурсия должна остановиться.
Ну да, каждый метод возвращает результат обработки.
И каждый метод вызываю с return ом.
Так что рекурсия должна остановиться.
Спустя 37 минут, 48 секунд (22.07.2012 - 18:09) kamanch написал(а):
Я тебе образно описал принцип рекурсии, т.к. в твоем примере рекурсии не видно вообще. Следовательно и не ясна суть твоей проблемы.
Спустя 1 день, 21 час, 28 минут, 33 секунды (24.07.2012 - 15:37) Dezigo написал(а):
Проблема у Вас в неправильном проектировании:
Всё уже за Вас продуманно к примеру в паттерне Chain.
Поищите в интерене там куча материалов по этому методу
Всё уже за Вас продуманно к примеру в паттерне Chain.

Поищите в интерене там куча материалов по этому методу
Спустя 8 часов, 27 минут, 23 секунды (25.07.2012 - 00:05) Guest написал(а):
Dezigo
Цепочка не всегда нужна, особенно если глубина вложенности не известна.
Паттерн цепочка служит совершенно для иных целей, например для навешивания события на клик кнопки в зависимости от контекста положения или нахождения.
То есть всегда должен быть контекст устанавливающий обработчик одного из классов в цепи после чего вызывается обработчик и завершается.
Здесь другая проблема.
Цепочка не всегда нужна, особенно если глубина вложенности не известна.
Паттерн цепочка служит совершенно для иных целей, например для навешивания события на клик кнопки в зависимости от контекста положения или нахождения.
То есть всегда должен быть контекст устанавливающий обработчик одного из классов в цепи после чего вызывается обработчик и завершается.
Здесь другая проблема.