Location: PHPKode > projects > SolarPHP > solar-system-1.1.1/solar/source/solar/Solar/Exception.php
<?php
/**
 * 
 * Generic exception class.
 * 
 * @category Solar
 * 
 * @package Solar
 * 
 * @author Paul M. Jones <hide@address.com>
 * 
 * @license http://opensource.org/licenses/bsd-license.php BSD
 * 
 * @version $Id: Exception.php 3850 2009-06-24 20:18:27Z pmjones $
 * 
 */
class Solar_Exception extends Exception
{
    /**
     * 
     * User-defined information array.
     * 
     * @var array
     * 
     */
    protected $_info = array();
    
    /**
     * 
     * Class where the exception originated.
     * 
     * @var array
     * 
     */
    protected $_class;
    
    /**
     * 
     * Constructor.
     * 
     * @param array $config Configuration value overrides, if any.
     * for 'class', 'code', 'text', and 'info'.
     * 
     */
    public function __construct($config = null)
    {
        $default = array(
            'class' => '',
            'code'  => '',
            'text'  => '',
            'info'  => array(),
        );
        $config = array_merge($default, (array) $config);
        
        parent::__construct($config['text']);
        $this->code = $config['code'];
        $this->_class = $config['class'];
        $this->_info = (array) $config['info'];
    }
    
    /**
     * 
     * Returnes the exception as a string.
     * 
     * @return void
     * 
     */
    public function __toString()
    {
        $class_code = $this->_class . "::" . $this->code;
        
        // basic string
        $str = "exception '" . get_class($this) . "'\n"
             . "class::code '$class_code' \n"
             . "with message '" . $this->message . "' \n"
             . "information " . var_export($this->_info, true) . " \n"
             . "Stack trace:\n"
             . "  " . str_replace("\n", "\n  ", $this->getTraceAsString());
        
        // at the CLI, repeat the message so it shows up as the last line
        // of output, not the trace.
        if (PHP_SAPI == 'cli') {
            $str .= "\n\n{$this->message}";
        }
        
        // done
        return $str;
    }
    
    /**
     * 
     * Returns user-defined information.
     * 
     * @param string $key A particular info key to return; if empty, returns
     * all info.
     * 
     * @return array
     * 
     */
    final public function getInfo($key = null)
    {
        if (empty($key)) {
            return $this->_info;
        } else {
            return $this->_info[$key];
        }
    }
    
    /**
     * 
     * Returns the class name that threw the exception.
     * 
     * @return string
     * 
     */
    final public function getClass()
    {
        return $this->_class;
    }
    
    /**
     * 
     * Returns the class name and code together.
     * 
     * @return string
     * 
     */
    final public function getClassCode()
    {
        return $this->_class . '::' . $this->code;
    }
}
Return current item: SolarPHP