You can start with installing your own error-handling. One that converts PHP errors into exception. Do it at the beginning of your script. Something likes this:
/*
|--------------------------------------------------------------------------
| Alternative error handler
|--------------------------------------------------------------------------
|
| See: http://php.net/manual/en/function.set-error-handler.php
|
*/
function my_error_handler($errno, $errstr, $errfile, $errline)
{
if (!(error_reporting() & $errno))
{
// This error code is not included in error_reporting
return;
}
throw new ErrorException( $errstr, $errno, 0, $errfile, $errline );
}
ini_set('display_errors', FALSE);
set_error_handler("my_error_handler");
Now you can use exceptions as the main error-handling mechanism. All you need now, is to catch the exceptions at the right location in your script and display errors yourself.
You can extend this mechanism to include the assert-handling also:
/*
|--------------------------------------------------------------------------
| Assert handling
|--------------------------------------------------------------------------
|
| See: http://php.net/manual/en/function.assert.php
|
*/
function my_assert_handler($file, $line, $code)
{
throw new Exception( "assertion failed @$file::$line($code)" );
}
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_BAIL, 0);
assert_options(ASSERT_QUIET_EVAL, 0);
assert_options(ASSERT_CALLBACK, 'my_assert_handler');
And just accept PHP is not Java or C++. It is a inconsistent mess.