Завершить функцию из внутреннего вызова функции - PHP - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть функция, которая нуждается в нескольких проверках, и для этого я добавила несколько функций, но когда какая-то внутренняя функция перестала работать, она должна вернуть ответ как неудачный, но это не так, и она продолжает следующую внутреннюю функцию

 public static function doMultipleWorks(){

  self::checkFirstCondition();
  self::checkSecondCondition();

  ...
  ...

  return response(['status' => true, 'data' => [...]]);

 }

 public static function checkFirstCondition(){

  ....
  ....
  if(this != that){
    return response(['status' => false, 'error_msg' => 'this is not equal to that']]
  }

 }

 public static function checkSecondCondition(){

  ....
  ....
  if(this != that){
    return response(['status' => false, 'error_msg' => 'this is not equal to that']]
  }


 }

Проблема в том, что, если первая или вторая функция не работает, она все равно продолжается и не выходит из функции.Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Вам необходимо проверить реакцию функций и на основе ответов вы должны продолжить или прервать дальнейшие процессы.Я считаю, что вы должны сделать что-то вроде этого:

public static function doMultipleWorks(){

  $firstResponse = self::checkFirstCondition();
  if ($firstResponse['status'] == false) {
       return $firstResponse;
  }
  $secondResponse = self::checkSecondCondition();
  if ($secondResponse['status'] == false) {
       return $secondResponse;
  }

  ...
  ...

  return response(['status' => true, 'data' => [...]]);

 }

 public static function checkFirstCondition(){

  ....
  ....
  if(this != that){
    return response(['status' => false, 'error_msg' => 'this is not equal to that']]
  }

 }

 public static function checkSecondCondition(){

  ....
  ....
  if(this != that){
    return response(['status' => false, 'error_msg' => 'this is not equal to that']]
  }


 }

Надеюсь, это поможет вам исправить ваш подход.

0 голосов
/ 14 февраля 2019

Вы не проверяете возвращаемое значение checkFirst и checkSecond, сделайте это или сгенерируйте исключение вместо прерывания функции и try/catch исключение

public function foo() {
     if ($bar = $this->bar()) return $bar;
}

public function bar() {
   if (something) return resp;
}

public function foo() {
    try {
        $this->bar();
    }catch(\Exception $e) {
         return [ 'success' => false, 'status' => $e->getMessage(), ];
    }
}

public function bar() {
   if (something) throw new Exception('Fail');
}
...