tags:

views:

295

answers:

3
<?php
     function some_function($arg) {
         if($filter->check_for_safe_input($arg)) {
             throw new Exception("Hacking Attempt");
         }
         do_some_database_stuff($arg);
     }
 ?>

In the above code example, does do_some_database_stuff ever get called if check_for_safe_input fails, or does the exception stop the function running? It's something I've never quite been sure of, and usually I just stick functions like do_some_database_stuff in an else statement to be sure, but this tends to lead to hugely nested functions.

+4  A: 

Yes, uncaught exceptions result in fatal errors that stop the execution of the script. So the do_some_database_stuff function will not be called if an exception is thrown. You can read more about exceptions in this article.

Darin Dimitrov
What if it is caught in the function calling this one? Does the rest of this function ever get run then?
Not Joe Bloggs
No. See php manual for an explanation.
svens
No, once you throw an exception the function execution is stopped (as if you returned some result) and the exception bubbles through the call stack until it finds a `catch` statement.
Darin Dimitrov
No, execution resumes in the catching function; you can't (in PHP) resume execution from where an exception stopped it.
bobince
+1  A: 

An exception, if not catched, will end script execution.

See the PHP manual chapter on Exceptions

Gordon
+3  A: 

Have a look at the PHP manual on exceptions.

When an exception is thrown, code following the statement will not be executed, and PHP will attempt to find the first matching catch block. If an exception is not caught, a PHP Fatal Error will be issued with an "Uncaught Exception ..." message, unless a handler has been defined with set_exception_handler().

http://ch.php.net/exceptions

So yes, the rest of the function is not being executed, a fata error occurs instead.
If you catch the exception, execution of the script continues in the corresponding catch block, everything "between" the function which throws an exception and the catch block is not executed.

svens