Re: Continued try blocks
2013/4/26 Andreas Heigl <[email protected]>
> try {
> $foo = $bar->getObject();
> $foo->doSomething()
> } catch(Exception $e) {
> continue // Or whatever shall be used
> }
>
> When $bar->getObject throws an Exception no $foo is set. So the next
> line will result in a "PHP Fatal error: Call to a member function
> doSomething() on a non-object".
>
That's fine to me.
It's a software engineering problem you can solve easily:
try {
$foo = $bar->getObject();
$foo->doSomething();
} catch (ObjectCreationException $oce) {
add_to_log('Unable to create object');
throw $oce; // or do something else,
// or just do nothing to exit from the try/catch block
} catch (Exception $e) {
add_to_log($e->getMessage());
continue;
}
The getObject() method should raise an ObjectCreationException, while the
doSomething() method could raise any other type of exception.
It's just a natural and smart way to use exceptions.
It could be solve differently:
try {
$foo = $bar->getObject();
$foo->doSomething();
} catch (NotImportantException $nie) {
add_to_log($nie->getMessage());
continue;
} catch (Exception $e) {
add_to_log($e->getMessage());
throw $e; // or do something else,
// or just do nothing to exit from the try/catch block
}
If an expression raises a NotImportantException, it will not interrupt the
execution flow.
Thread (33 messages)