Есть ли способ остановить выполнение метода объекта из другого метода? - PullRequest
0 голосов
/ 08 июля 2011

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

Существует отдельный объект, который отвечает за создание содержимого страницы, мы можем назвать его Содержимое .Другой объект - это его родительский объект - Core . Содержимое вызовы объекта Core метод * Check_parameters_count ($ parameters_count) *, поэтому Core должен проверить, равно ли количество указанных параметров в URI целому числу, данному при выполненииэтот метод ($ parameters_count), если нет - Core должен генерировать страницу с ошибкой и прекратить выполнение Content метода рендеринга.

Есть ли способ сделать это без использования если заявление?Просто используйте * $ core-> Check_parameters_count (2) * в классе content , чтобы упростить работу программистов конкретного движка рендеринга.

Все должно выглядеть примерно так:

 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 Ответ

1 голос
/ 08 июля 2011

Бросить исключение .

У вас есть 3 области действия:

  • Функция A (вызывающая функция B)
  • Функция B
  • Вызывающий функцию A

Если вы выбросите исключение в функции B и сделаете блок try / catch в вызывающем устройстве функции A, выполнение функции A будет прервано исключением.Фактически - выполнение всего кода будет прервано до уровня, который заключен в соответствующий блок try / catch.

...