Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

php try ... else

Tags:

exception

php

Is there something similar in PHP to the try ... else in Python?

I need to know if the try block executed correctly as when the block executed correctly, a message will be printed.

like image 263
Pwnna Avatar asked Jul 29 '10 16:07

Pwnna


2 Answers

PHP does not have try/catch/else. You could however set a variable in the catch block that can be used to determine if it was run:

$caught = false;

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

if (!$caught) {

}
like image 101
webbiedave Avatar answered Nov 03 '22 02:11

webbiedave


I think the "else" clause is a bit limiting, unless you don't care about any exceptions thrown there (or you want to bubble those exceptions)... From my understanding of Python, it's basically the equivalent of this:

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
}

So it's a bit more verbose (since you need to re-throw the exceptions), but it also bubbles up the stack the same as the else clause...

Edit Or, a bit cleaner version (5.3 only)

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
}

Edit 2

Re-reading your question, I think you may be overcomplicating things with an "else" block... If you're just printing (which isn't likely to throw an exception), you don't really need an else block:

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

That code will only ever print either Success or Error... Never both (since if the print function throws the exception, it won't be actually printed... But I don't think the print CAN throw exceptions...).

like image 45
ircmaxell Avatar answered Nov 03 '22 03:11

ircmaxell