Try-Catch не перехватывает пользовательский тип исключения - PullRequest
2 голосов
/ 05 апреля 2011

Это довольно простой вопрос, и это явно мой собственный статус новичка, который сдерживает меня. Извинения.

Почему этот бит кода не работает?

    try
    {
        create_account($accountXML);
        echo "<p>Successfully created your account.</p>";
        try
        {
            create_page($pageXML,$base64_credentials);
            echo "<p>Successfully created your page!</p>";
        }
        catch (exception $e){ echo "<p>$e</p>"; }
    }
    catch(exception $e)
    {
        echo "<p>$e</p>";           
    }
    catch(emailInUseException $e)
    {
        echo "<p>Error: Email already in use. Could not create account.</p>";
    }

В функции create_account ...

if ((!substr_count($response, "200 Account created successfully") > 0)) // If failed
{
    if ((substr_count($response, "400 EmailAddressInUse") > 0)) // If email address already in use
        {
            throw new emailInUseException($response);
        }
        throw new exception("Error: Could not create account. Reason: $response");
}

Уловка emailInUse не работает: (

Обновление: При включенной отладке я получаю следующую ошибку: Fatal error: Class 'emailInUseException' not found

Я уверен, что это действительно ужасно очевидно. Спасибо за любую помощь.

1 Ответ

8 голосов
/ 05 апреля 2011
    catch(emailInUse $e)
    {
        echo "<p>Error: Email already in use. Could not create account.</p>";
    }
    catch(exception $e)
    {
        echo "<p>$e</p>";           
    }

Вам необходимо изменить порядок. Более общие исключения должны доходить до дна, иначе ваш код просто перехватит его и выбросит до того, как будет поймано конкретное исключение.

...