2012-01-13 16 views
3

このエラーは、Facebook PHP SDKを使用しているときに発生していますが、実際は一般的なエラーだと思います。親クラスでスローされた例外子クラスでキャッチされない

私はこのコードを実行すると、すべてが正常に動作し、例外がキャッチされています

$facebook = new Facebook('appId'=>APP_ID,'secret'=>APP_SECRET); 
try { 
    $user_profile = $facebook->api('/me','GET'); 
    echo "Name: " . $user_profile['name']; 
} catch(FacebookApiException $e) { 
    $login_url = $facebook->getLoginUrl(); 
    echo 'Please <a href="' . $login_url . '">login.</a>'; 
} 

しかし、私はこのコードを実行します。このように見て拡張したクラスのメソッドで

$facebook = new Facebook_Extended('appId'=>APP_ID,'secret'=>APP_SECRET); 
$facebook->api_extended(); 

を:

// Overrides parent::api() 
public function api() { 
    try { 
     $user_profile = parent::api('/me','GET'); 
     echo "Name: " . $user_profile['name']; 
    } catch(FacebookApiException $e) { 
     $login_url = $this->getLoginUrl(); 
     echo 'Please <a href="' . $login_url . '">login.</a>'; 
    } 
} 

「Uncaught OAuthException」というエラーが表示されます。

例外が子クラスにキャッチされない理由は何ですか?

+0

あなたは受け入れられて、その後、数日中にあなたがそれをマークするために許可されます答えとしてあなたのソリューションを投稿することができます。 – shanethehat

答えて

4

をしようと、当分の間、私は、これが問題だった実現しなかったが、このクラスは名前空間にあるので、私は私の例外に「\」を追加する必要が:

catch (\FacebookApiException $e) 

http://onehackoranother.com/logfile/2009/01/php-5-3-exception-gotcha

+0

名前空間にある_child_クラスで例外をキャッチできないときも同じ問題が発生していましたが、親クラスによって強くcougtされていました。先頭のスラッシュが追加されました。 – Hellbyte

0

apiメソッドは静的ではないので、あなたはこのようにそれを使用するべきではありません。

$user_profile = $this->api('/me','GET'); 

ない場合は、あなたが間違って起こっているのかを見ることができますので、あなたは常に汎用的な例外のために別のcatchブロックを追加することができます。

public function api_extended() { 
    try { 
     $user_profile = parent::api('/me','GET'); 
     echo "Name: " . $user_profile['name']; 
    } catch(FacebookApiException $e) { 
     $login_url = $this->getLoginUrl(); 
     echo 'Please <a href="' . $login_url . '">login.</a>'; 
    } catch(Exception $e) { 
     var_dump($e); 
    } 
} 
+0

私の関数は実際には "api"(反映されたオリジナルの投稿を編集)ですが、 "api_extended"に名前を変更して "$ this-> api"で他のAPIメソッドを呼び出してみました。 。 また、私は一般的な例外の考え方を試しました。それでも同じエラー。 – derekbeau

0

スタックトレースが役立ちます。 次

public function api_extended() { 
try { 
    $user_profile = parent::api('/me','GET'); 
    echo "Name: " . $user_profile['name']; 
} catch(FacebookApiException $e) { 
    $login_url = $this->getLoginUrl(); 
    echo 'Please <a href="' . $login_url . '">login.</a>'; 
} catch (Exception $err){ 
    print_r($err->getTrace()); 
} 

}

+0

"Uncaught OAuthException"を返す - "catch(OAuthException $ e)"も試みました。運がない。 – derekbeau

関連する問題