PHP попробовать ... еще - PullRequest
       0

PHP попробовать ... еще

16 голосов
/ 29 июля 2010

Есть ли в PHP что-то похожее на try ... else в Python?

Мне нужно знать, правильно ли выполнен блок try, когда блок выполняется правильно, будет напечатано сообщение.

Ответы [ 6 ]

44 голосов
/ 29 июля 2010

PHP не имеет try / catch / else.Однако вы можете установить переменную в блоке catch, которая может быть использована для определения, был ли он запущен:

$caught = false;

try {
    // something
} catch (Exception $e) {
    $caught = true;
}

if (!$caught) {

}
5 голосов
/ 29 июля 2010

Я думаю, что предложение "else" является немного ограничивающим, если вы не заботитесь о каких-либо исключениях, которые там появляются (или вы хотите всплыть из-под этих исключений) ... Из моего понимания Python это в основном эквивалент этого :

try {
    //...Do Some Stuff Here
    try {
        // Else block code here
    } catch (Exception $e) {
        $e->elseBlock = true;
        throw $e;
    }
} catch (Exception $e) {
    if (isset($e->elseBlock) && $e->elseBlock) {
        throw $e;
    }
    // catch block code here
}

Так что это немного более многословно (поскольку вам нужно перебрасывать исключения), но оно также всплывает в стеке так же, как предложение else ...

Редактировать Или, более чистая версия (только 5.3)

class ElseException extends Exception();

try {
    //...Do Some Stuff Here
    try {
        // Else block code here
    } catch (Exception $e) {
        throw new ElseException('Else Clasuse Exception', 0, $e);
    }
} catch (ElseException $e) {
    throw $e->getPrevious();
} catch (Exception $e) {
    // catch block code here
}

Редактировать 2

Перечитывая ваш вопрос, я думаю, что вы, возможно, слишком усложняете ситуацию с помощью блока "else" ... Если вы просто печатаете (что вряд ли вызовет исключение), вам на самом деле не нужен блок else:

try {
    // Do Some stuff
    print "Success";
} catch (Exception $e) {
    //Handle error here
    print "Error";
}

Этот код будет печатать только когда-либо либо Success, либо Error ... Никогда оба (поскольку, если функция print выдает исключение, она фактически не будет напечатана ... Но я не думаю, что print МОЖЕТ выбрасывать исключения ...).

0 голосов
/ 29 июля 2010
try {
    $clean = false;
    ...
    $clean = true;
} catch (...) { ... }

if (!$clean) {
    //...
}

Это лучшее, что вы можете сделать.

0 голосов
/ 29 июля 2010

В php.

есть try-catch Пример:

function inverse($x) {
    if (!$x) {
        throw new Exception('Division by zero.');
    }
    else return 1/$x;
}

try {
    echo inverse(5) . "\n";
    echo inverse(0) . "\n";
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

// Continue execution
echo 'Hello World';
0 голосов
/ 29 июля 2010

Не знаком с python, но похоже, что вы после блоков Try Catch, используемых с исключениями ...

http://php.net/manual/en/language.exceptions.php

0 голосов
/ 29 июля 2010

Вы можете использовать try { } catch () { } и throw. Смотри http://php.net/manual/en/language.exceptions.php

try {
    $a = 13/0; // should throw exception
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

или вручную:

try {
    throw new Exception("I don't want to be tried!");
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...