Break from try/catch block

I also faced this situation, and like you, didn't want countless if/else if/else if/else statements as it makes the code less readable.

I ended up extending the Exception class with my own. The example class below was for validation problems that when triggered would produce a less severe 'log notice'

class ValidationEx extends Exception
{
    public function __construct($message, $code = 0, Exception $previous = null)
    {
        parent::__construct($message, $code, $previous);
    }

    public function __toString()
    {
        return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
    }
}

In my main code I call it;

throw new ValidationEx('You maniac!');

Then at the end of the Try statement I have

        catch(ValidationEx $e) { echo $e->getMessage(); }
        catch(Exception $e){ echo $e->getMessage(); }

Happy for comments and criticisms, we're all here to learn!


With a goto of course!

try {

  $obj = new Clas();

  if ($obj->foo) {
    goto break_free_of_try;
  }

  // do other stuff here

} catch(Exception $e) {

}
break_free_of_try:

Well, there is no reason for that, but you can have fun forcing an exception in your try block, stopping execution of your function.

try {
   if ($you_dont_like_something){
     throw new Exception();
     //No code will be executed after the exception has been thrown.
   }
} catch (Exception $e){
    echo "Something went wrong";
}