Hybrid_Auth : не ловится исключение

Shasoft

Новичок
Прикручиваю библиотеку авторизации Hybrid_Auth (http://hybridauth.sourceforge.net/). В данном коде в конструкторе кидается исключение.
PHP:
            $err = true;
            try
            {
                $hybridauth = new \Hybrid_Auth( $config );
                $err = false;
            } catch(Exception $e) {
                echo "[123]";
            } finally {
                if($err) echo "[456]";
            }
И это исключение не отлавливается конструкцией try/catch а выводится на экран. При этом сначала идет вывод "[456]" а потом текст исключения.
Вопрос: почему не попадает в блок catch и не выводится "[123]"?

Само исключение кидается вот так
PHP:
throw new Exception( $m, $c );
 

AnrDaemon

Продвинутый новичок
Потому что исключение вываливается в другом месте кода.
И вообще, не надо лепить критические секции, если ты не собирается ничего делать с исключениями.
 

AmdY

Пью пиво
Команда форума
Может деструктор какой. Но в любом случае, с исключением идёт трейс в какой строки и что за ошибка произошла, посмотри, проверь и убедишься, что проблема не в try catch.
 

Shasoft

Новичок
Какая ошибка произошла - тут все понятно. Это библиотека авторизации и это исключение происходит если пользователь отказался от авторизации. В этом случае кидается исключение "Authentication failed! Yandex returned an error: access_denied" (авторизуюсь через Яндекс). Мне нужно отловить эту ошибку и обработать её. Фактически это не ошибка в коде, а исключение вызванное отказом от авторизации. Тут еще все не так понятно из-за того что происходят перенаправление с одного сайта на другой (в данном случае на Y), а потом обратно. Т.е. нельзя просто в код вставить var_dump, так как в этом случае перенаправление не срабатывает и программа просто не доходит до нужного места.
 

Redjik

Джедай-мастер
нет, не нашел никаких переопределений.
при чем тут переопределение, ты ловишь эксепшен находящийся в определенном неймспейсе... по дефолту в том же, что и класс.
короче, ты не то ловишь - 99%
Код:
catch(\Exception $e)
 

Shasoft

Новичок
Похоже действительно не то ловлю.
Сделал чистый пример:
PHP:
    //namespace controllers;
    require_once( "HybridAuth/hybridauth/Hybrid/Auth.php" );
    include dirname(__FILE__) . '/../.configAuth.php';      
    $config['base_url'] = "http://<мой сайт>/HybridAuth/hybridauth/index.php";
    $err = true;
    try{
        $hybridauth = new \Hybrid_Auth( $config );
        $servaceName = "Yandex";
        $api = $hybridauth->authenticate( $servaceName );
        // Проверяем авторизацию
        if( $api->isUserConnected() )
        {
            // Получить данные профиля
            $profileInfo = $api->getUserProfile();
        }
        else
        {
            // Ошибка авторизации
            $xtoken = "err.noAuth";
        }
        $err = false;
    }
    catch( Exception $e ){
        $xtoken = "err.Exception";
    }
    finally {
        if( $err )
        {
            echo "<b style='color:red'>Error</b>";
            echo "<div>";
            var_dump($xtoken);
            echo "</div>";
        }
    }
Все ловится. А если расcкомментировать строку "namespace controllers", то не ловится. Буду разбираться с namespace.
 

MiksIr

miksir@home:~$
Хм, да... просто логично выглядит, если с неймспейсом не ловится, значит есть controllers\Exception... а бросается что-то иное.. тогда хз =)
 

Redjik

Джедай-мастер
та не, я не об этом, я уже показывал эту строчку ТС =))
пускай курит неймспейсы и правда
 

AnrDaemon

Продвинутый новичок
А если в неймспейсе не определен Exception, разве не должно ловиться общее?
 

fixxxer

К.О.
Партнер клуба
Ух ты. Действительно:

PHP:
$ php -r 'namespace foo { try { throw new \Exception(); } catch (Exception $e) {} }'
PHP Fatal error:  Uncaught exception 'Exception' in Command line code:1
Stack trace:
#0 {main}
  thrown in Command line code on line 1
 
Сверху