getNumber()) !== 16) { throw new Exception('Credit card is not right'); } } } // In this case, if someone tried to use the Processor class // to charge a credit card number that is not 16 characters long, an // exception will be thrown which stops the rest of the code from running. $processor = new Processor(); $processor->charge('1234'); // A developer who wants to prevent an exception from stopping code execution // can catch the exception and use it for logging or a return an error to a user. // Just wrap the code that might throw an exception with the keyword "try" and brackets // followed by "catch", the exception type in parentheses and more brackets. try { $processor->charge('1234'); } catch (Exception $e) { echo $e->getMessage() . "\n"; } // You can make your own custom exceptions as well. They are just classes // that extend Exception. class MyCustomException extends Exception {} // Then, you can try to catch your exception instead of the base exception. try { throw new MyCustomException('I am a custom exception'); } catch (MyCustomException $e) { echo "Cauth MyCustomException\n"; } // Since all exceptions inherit from Exception, catching // Exception will catch any and all exceptions that might be thrown. try { throw new MyCustomException('I inherit from Exception'); } catch (Exception $e) { echo "Still caught MyCustomException\n"; } // You can also create multiple catch blocks to handle different types of exceptions in // one try-catch. try { throw new MyCustomException('I am being thrown again'); } catch (MyCustomException $e) { echo "MyCustomException was caught\n"; } catch (Exception $e) { echo "Just in case a different exception is thrown\n"; }