Blame |
Last modification |
View Log
| RSS feed
1
<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2013 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace Zend\Stdlib
;
use ErrorException
;
/**
* ErrorHandler that can be used to catch internal PHP errors
* and convert to a ErrorException instance.
*/
abstract class ErrorHandler
{
/**
* Active stack
*
* @var array
*/
protected static
$stack = array();
/**
* Check if this error handler is active
*
* @return boolean
*/
public static
function started
()
{
return (bool
) static
::getNestedLevel();
}
/**
* Get the current nested level
*
* @return int
*/
public static
function getNestedLevel
()
{
return count(static
::$stack);
}
/**
* Starting the error handler
*
* @param int $errorLevel
*/
public static
function start
($errorLevel = \
E_WARNING)
{
if (!static
::$stack) {
set_error_handler(array(get_called_class
(), 'addError'), $errorLevel);
}
static
::$stack[] = null;
}
/**
* Stopping the error handler
*
* @param bool $throw Throw the ErrorException if any
* @return null|ErrorException
* @throws ErrorException If an error has been catched and $throw is true
*/
public static
function stop
($throw = false)
{
$errorException = null;
if (static
::$stack) {
$errorException = array_pop(static
::$stack);
if (!static
::$stack) {
restore_error_handler();
}
if ($errorException && $throw) {
throw $errorException;
}
}
return $errorException;
}
/**
* Stop all active handler
*
* @return void
*/
public static
function clean
()
{
if (static
::$stack) {
restore_error_handler();
}
static
::$stack = array();
}
/**
* Add an error to the stack
*
* @param int $errno
* @param string $errstr
* @param string $errfile
* @param int $errline
* @return void
*/
public static
function addError
($errno, $errstr = '', $errfile = '', $errline = 0)
{
$stack = & static
::$stack[ count(static
::$stack) - 1 ];
$stack = new ErrorException
($errstr, 0, $errno, $errfile, $errline, $stack);
}
}