Php try... else

Есть ли что-то подобное в PHP для try ... else в Python?

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

Ответы

Ответ 1

Вы можете использовать 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";
}

Ответ 2

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

$caught = false;

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

if (!$caught) {

}

Ответ 3

Я думаю, что предложение "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 block:

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

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

Ответ 5

try {
    $clean = false;
    ...
    $clean = true;
} catch (...) { ... }

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

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

Ответ 6

Существует try-catch в php.

Пример:

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';