Merge branch 'errors-exceptions' of github.com:aranw/php-the-right-way into aranw-errors-exceptions

This commit is contained in:
Phil Sturgeon
2014-02-17 10:22:40 -05:00

View File

@@ -1,11 +1,55 @@
---
isChild: true
---
isChild: true
---
## Errors {#errors_title}
PHP has several levels of error severity. The three most common types of messages are errors, notices and warnings. These have different levels of severity; `E_ERROR`, `E_NOTICE`, and `E_WARNING`. Errors are fatal run-time errors and are usually caused by faults in your code and need to be fixed as they'll cause PHP to stop executing. Warnings are non-fatal errors, execution of the script will not be halted. Notices are advisory messages caused by code that may or may not cause problems during the execution of the script, execution is not halted.
PHP Errors differ to Exceptions in that they, Errors can halt the execution of your script depending on the level of
severity. Exceptions on the other hand can be caught using `try catch` statements.
Another type of error message reported at compile time is the `E_STRICT` message, these messages are used to suggest changes to your code to help ensure best interoperability and forward compatibility for your code.
### Error Severity
* [Predefined Constants for Error Handling](http://www.php.net/manual/en/errorfunc.constants.php)
PHP's built in error reporting and logging, allows for different levels of reporting via the use of Predefined
Constants. The three main constants are `E_ERROR`, `E_NOTICE`, and `E_WARNING`.
The different levels of error severity have different meanings. The three most common types of messages are Errors,
Notices and Warnings. Errors are fatal run-time Errors and are usually caused by faults in your code and need to be
fixed as they'll cause execution to be halted. Warnings are non-fatal errors, execution of the script will continue
and dependant on settings the user may or not may see the Warning message. Notices are advisory messages caused by
code that may or may not cause problems during script execution, execution is not halted and again depending on
settings the user may or not see the Notice message.
Another type of Error Message reported at compile time are `E_STRICT` messages, these messages are used to suggest
changes to your code to help ensure best interoperability and forward compatibility for your code.
### Changing PHP's Error Reporting Behaviour
Error Reporting can both be changed using PHP settings and PHP function calls. Using the built in PHP function
`error_reporting()` you can set the level of errors for the duration of the script execution by passing one of the
Predefined Constants. For more information on this relating to application environments check
out the [Error Reporting][errorreport].
As well as setting the level of error reporting during script execution you can also suppress Errors using the
Error Control Operator `@` by putting this operator at the beginning an expression. The use of this operator
is not advised and should never be used, using this operator is like admitting your code is bad and can fail over
* [Error Control Operators](http://php.net/manual/en/language.operators.errorcontrol.php)
### Error Exceptions
Optionally you can throw your Errors as Exceptions using the `ErrorException` class, this class extends the `Exception`
class. This is a common practice and by passing errors off as Exceptions in development you can handle them better than
the usual result. By passing these Errors as Exceptions and not trying to catch them in Development the hope is that
you'll catch the Error and hopefully this will allow you to deal with the issue before it becomes a problem in a
Production Environment.
More information on this and details on how to use `ErrorException` with Error Handling can be found at
[ErrorException Class][errorexception].
* [Error Control Operators](http://php.net/manual/en/language.operators.errorcontrol.php)
* [Predefined Constants for Error Handling](http://www.php.net/manual/en/errorfunc.constants.php)
* [error_reporting](http://www.php.net/manual/en/function.error-reporting.php)
* [ErrorException Class][errorexception]
* [Reporting][errorreport]
[errorexception]: http://php.net/manual/en/class.errorexception.php
[errorreport]: /#error_reporting