2015-12-08 3 views
0

Я в ситуации, когда мне нужно вызвать тот же метод, если какое-либо исключение выбрано, чтобы я не дублировал какой-либо код. Однако он не работает, как я думал. Вот соответствующий код:Можно ли вызвать метод из того же метода?

public static function getFolderObject($folder_id) 
    { 
     $client = new Client('https://api.box.com/{version}/folders', [ 
      'version' => '2.0', 
      'request.options' => [ 
       'headers' => [ 
        'Authorization' => 'Bearer ' . self::getAccessToken(), 
       ] 
      ] 
     ]); 

     $request = $client->get($folder_id); 

     try { 
      $response = $request->send(); 
      $result = $response->json(); 

      $files = $result['item_collection']['entries']; 
     } catch (BadResponseException $e) { 
      $result = $e->getResponse()->getStatusCode(); 

      if ($result === 401) { 
       self::regenerateAccessToken(); 
       self::getFolderObject(); 
      } 
     } 

     return count($files) ? $files : false; 
    } 

Как вы можете видеть, что я звоню метод от метода метода при if условия self::getFolderObject(); для предотвращения дублирования кода снова под if заявлением от начала метода. Однако, если я дублирую код, он работает так, как ожидалось. Есть ли какое-то решение для достижения того, чего я хочу?

+1

Похоже, вы не передаете в 'переменной $ folder_id' при повторном вызове метода. Вам также нужно «вернуть» вызов. –

ответ

2

Вы пропустили, чтобы вернуть значение и присвоить folder_id:

public static function getFolderObject($folder_id) 
    { 
     $client = new Client('https://api.box.com/{version}/folders', [ 
      'version' => '2.0', 
      'request.options' => [ 
       'headers' => [ 
        'Authorization' => 'Bearer ' . self::getAccessToken(), 
       ] 
      ] 
     ]); 

     $request = $client->get($folder_id); 

     try { 
      $response = $request->send(); 
      $result = $response->json(); 

      $files = $result['item_collection']['entries']; 
     } catch (BadResponseException $e) { 
      $result = $e->getResponse()->getStatusCode(); 

      if ($result === 401) { 
       self::regenerateAccessToken(); 
       return self::getFolderObject($folder_id); 
      } 
     } 

     return count($files) ? $files : false; 
    } 
+0

Огромное спасибо человеку. Я пропустил заявление о возврате. :) –

+0

Добро пожаловать :) –

Смежные вопросы