This document discusses errors, exceptions, and logging in PHP. It describes the different types of PHP errors and how exceptions can be used to handle errors and failures more object-oriented way. Exceptions allow for more descriptive error handling than basic errors. The document also recommends logging errors and exceptions for easier debugging. Various logging options for PHP are presented, including Monolog and other libraries that support the PSR-3 logging standard. Capturing errors, exceptions, and logging messages is discussed.
3. ● Something broke… :)
● e.g.
○ Can’t connect to MySQL (mysqli_connect)
○ No such file or directory (fopen)
● Usually from PHP core
● Sometimes fatal (stop execution)
What are errors?
4. Types of PHP Errors
● E_ERROR
● E_WARNING
● E_NOTICE
● E_PARSE
● Others (E_STRICT, E_DEPRECATED) etc.
● User errors (E_USER_ERROR etc.)
10. Problems.
● Depends on “error_reporting” php.ini setting
● Displaying errors is UGLY
● Existence of “@” operator
● Only logs to file or syslog
● Easily ignored
● Not very “OO”
11. Ways Around
// Will raise E_NOTICE
fopen($somefile, 'r');
// No error! :)
if (file_exists($somefile)) {
fopen($somefile, 'r');
} else {
// nice handling...
}
13. ● Something still broke
● Wider scope:
○ Logic errors
○ Flow control (for errors)
● “Catchable”
● Turn into fatal errors if not caught
● They are classes (can make your own)
● Common in other OO languages
What are exceptions?
14. Jargon Buster
● throw
Triggering an exception
● try
Try to run a piece of code which *may* throw an
exception
● catch
Handle an exception
● finally
Always run some code after a try/catch block
15. ● Built in to PHP
● More descriptive than just “Exception”, e.g.:
○ InvalidArgumentException
○ LogicException
○ OutOfBoundsException
○ RuntimeException
○ see PHP manual for more
SPL Exceptions
29. Capturing Logging
Use these and send output to $logger
● set_exception_handler()
○ Handles all uncaught exceptions
● set_error_handler()
○ Handles most errors
● register_shutdown_function()
○ Handles fatal errors
30. Sending Log Messages
● PSR-3 makes it easy
● However you want…
● Monolog has loads:
○ syslog-compatible / error_log
○ Email, HipChat
○ AMQP, Sentry, Zend Monitor, Graylog2
○ Redis, MongoDB, CouchDB
31. Summary
● PHP generates errors usually
● Exceptions are great in OOP context
● More control with exceptions
● Logging is important
● Logging is easy
● Short term investment, long term benefit
● NO EXCUSES!