Есть ли способ остановить выполнение метода объекта из другого метода?

Ситуация выглядит следующим образом:

Существует отдельный объект, который отвечает за генерацию содержимого страницы, мы можем назвать его 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.

Другие вопросы по тегам