Mercurial > hg > cmmr2012-drupal-site
diff vendor/zendframework/zend-stdlib/src/ErrorHandler.php @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children | 5311817fb629 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/zendframework/zend-stdlib/src/ErrorHandler.php Thu Jul 05 14:24:15 2018 +0000 @@ -0,0 +1,115 @@ +<?php +/** + * Zend Framework (http://framework.zend.com/) + * + * @link http://github.com/zendframework/zf2 for the canonical source repository + * @copyright Copyright (c) 2005-2015 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 an ErrorException instance. + */ +abstract class ErrorHandler +{ + /** + * Active stack + * + * @var array + */ + protected static $stack = []; + + /** + * Check if this error handler is active + * + * @return bool + */ + 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([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 = []; + } + + /** + * 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); + } +}