php try … else

后端 未结 6 1510
余生分开走
余生分开走 2021-01-07 18:50

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

相关标签:
6条回答
  • 2021-01-07 19:18

    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

    0 讨论(0)
  • 2021-01-07 19:22

    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";
    }
    
    0 讨论(0)
  • 2021-01-07 19:22
    try {
        $clean = false;
        ...
        $clean = true;
    } catch (...) { ... }
    
    if (!$clean) {
        //...
    }
    

    That's the best you can do.

    0 讨论(0)
  • 2021-01-07 19:26

    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';
    
    0 讨论(0)
  • 2021-01-07 19:30

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

    0 讨论(0)
  • 2021-01-07 19:35

    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) {
    
    }
    
    0 讨论(0)
提交回复
热议问题