Pwnna
Pwnna

Reputation: 9528

php try ... else

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.

Upvotes: 24

Views: 23120

Answers (6)

webbiedave
webbiedave

Reputation: 48897

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) {

}

Upvotes: 62

ircmaxell
ircmaxell

Reputation: 165191

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...).

Upvotes: 7

Artefacto
Artefacto

Reputation: 97805

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

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

That's the best you can do.

Upvotes: 0

Sarfraz
Sarfraz

Reputation: 382656

There is try-catch in php.

Example:

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

Upvotes: 0

Peter O'Callaghan
Peter O'Callaghan

Reputation: 6186

Not familiar with python but it sounds like you're after Try Catch blocks used with exceptions...

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

Upvotes: 0

MvanGeest
MvanGeest

Reputation: 9661

You can use try { } catch () { } and throw. See http://php.net/manual/en/language.exceptions.php

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

or manually:

try {
    throw new Exception("I don't want to be tried!");
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

Upvotes: -2

Related Questions