Есть ли способ остановить выполнение метода объекта из другого метода?
Ситуация выглядит следующим образом:
Существует отдельный объект, который отвечает за генерацию содержимого страницы, мы можем назвать его Content. Другой объект - это его родительский объект - основной объект. Объектсодержимого вызывает метод Core *Check_parameters_count($parameters_count)*, поэтому Core должен проверить, равно ли число указанных параметров в URI целому числу, данному при выполнении этого метода ($parameters_count), если нет - Core должен сгенерировать страницу ошибки и прекратить выполнение Метод визуализации контента.
Есть ли способ сделать это без использования оператора if? Просто используйте *$core->Check_parameters_count(2)* в классе контента, чтобы упростить работу программистов движка рендеринга.
Все должно выглядеть примерно так:
class Core {
public function Check_parameters_count($parameters_count) {
if (count($this->parameters) != $parameters_count) {
$this->Show_error(404);
$this->Stop_executing($content, 'Render');
//or
stop($content->Render);
//or something similar..
}
}
}
class Content {
public function Render() {
//check given parameters so we could know which page should be rendered and how many parameters should be given
//...
//lets say we should have exactly 2 parameters
$parameters_count = 2;
//check it
$core->Check_parameters_count($parameters_count);
//if parameters count matched - continue method execution
//...
}
}
1 ответ
Брось исключение.
У вас есть 3 области:
- Функция A (вызывающая функция B)
- Функция Б
- Вызывающая функция A
Если вы выбросите исключение в функции B и сделаете блок try/catch в вызывающей функции функции A, выполнение функции A будет прервано из-за исключения. Фактически - выполнение всего кода будет прервано до уровня, который заключен в соответствующий блок try/catch.