patError.php 9.65 KB
<?php
/**
 * patError error object used by the patFormsError manager as error messages
 * container for precise error management.
 *
 *        $Id: patError.php,v 1.5 2004/04/17 20:29:56 schst Exp $
 *
 * @access                public
 * @package                patError
 */

/**
 * patError error object used by the patFormsError manager as error messages
 * container for precise error management.
 *
 * $Id: patError.php,v 1.5 2004/04/17 20:29:56 schst Exp $
 *
 * @access                public
 * @package                patError
 * @version                0.3
 * @author                gERD Schaufelberger <gerd@php-tools.net>
 * @author                Sebastian Mordziol <argh@php-tools.net>
 * @author                Stephan Schmidt <schst@php-tools.net>
 * @license                LGPL
 * @link                http://www.php-tools.net
 */
class patError
{
   /**
        * stores the error level for this error
        *
        * @access        private
        * @var                string
        */
        var        $level  =   null;

   /**
        * stores the code of the error
        *
        * @access        private
        * @var                string
        */
        var        $code  =   null;

   /**
        * stores the error message - this is the message that can also be shown the
        * user if need be.
        *
        * @access        private
        * @var                string
        */
        var        $message  =   null;

   /**
        * additional info that is relevant for the developer of the script (e.g. if
        * a database connect fails, the dsn used) and that the end-user should not
        * see.
        *
        * @access        private
        * @var                string
        */
        var        $info  =   '';

   /**
        * stores the filename of the file the error occurred in.
        *
        * @access        private
        * @var                string
        */
        var        $file  =   '';

   /**
        * stores the line number the error occurred in.
        *
        * @access        private
        * @var                integer
        */
        var        $line  =   0;

   /**
        * stores the name of the method the error occurred in
        *
        * @access        private
        * @var                string
        */
        var        $function  =   '';

   /**
        * stores the name of the class (if any) the error occurred in.
        *
        * @access        private
        * @var                string
        */
        var        $class  =   '';

   /**
        * stores the type of error, as it is listed in the error backtrace
        *
        * @access        private
        * @var                string
        */
        var        $type  =   '';

   /**
        * stores the arguments the method that the error occurred in had received.
        *
        * @access        private
        * @var                array
        */
        var        $args  =   array();

   /**
        * stores the complete debug backtrace (if your PHP version has the
        * debug_backtrace function)
        *
        * @access        private
        * @var                mixed
        */
        var        $backtrace  =   false;

   /**
        * constructor, wrapper for the upcoming PHP5 constructors for upward
        * compatibility.
        *
        * @access        public
        * @param        int                $level        The error level (use the PHP constants E_ALL, E_NOTICE etc.).
        * @param        string        $code        The error code from the application
        * @param        string        $msg        The error message
        * @param        string        $info        Optional: The additional error information.
        * @see                __construct()
        */
    function patError( $level, $code, $msg, $info = null )
    {
                $this->__construct( $level, $code, $msg, $info );
    }

   /**
        * constructor - used to set up the error with all needed error details.
        *
        * @access        public
        * @param        int                $level        The error level (use the PHP constants E_ALL, E_NOTICE etc.).
        * @param        string        $code        The error code from the application
        * @param        string        $msg        The error message
        * @param        string        $info        Optional: The additional error information.
        * @todo                all calls to patErrorManager::raise* should not be included in backtrace
        */
    function __construct( $level, $code, $msg, $info = null )
    {
                static $raise                =        array(        'raise',
                                                                                'raiseerror',
                                                                                'raisewarning',
                                                                                'raisenotice'
                                                                        );

                $this->level        =        $level;
                $this->code                =        $code;
                $this->message        =        $msg;

                if( $info != null )
                {
                        $this->info = $info;
                }

                if( function_exists( 'debug_backtrace' ) )
                {
                        $this->backtrace        =        debug_backtrace();

                        for( $i = count( $this->backtrace ) - 1; $i >= 0; --$i )
                        {
                                if( in_array( $this->backtrace[$i]['function'], $raise ) )
                                {
                                        ++$i;
                                        if( isset( $this->backtrace[$i]['file'] ) )
                                                $this->file                =        $this->backtrace[$i]['file'];
                                        if( isset( $this->backtrace[$i]['line'] ) )
                                                $this->line                =        $this->backtrace[$i]['line'];
                                        if( isset( $this->backtrace[$i]['class'] ) )
                                                $this->class        =        $this->backtrace[$i]['class'];
                                        if( isset( $this->backtrace[$i]['function'] ) )
                                                $this->function        =        $this->backtrace[$i]['function'];
                                        if( isset( $this->backtrace[$i]['type'] ) )
                                                $this->type                =        $this->backtrace[$i]['type'];

                                        $this->args                =        false;
                                        if( isset( $this->backtrace[$i]['args'] ) )
                                        {
                                                $this->args                =        $this->backtrace[$i]['args'];
                                        }
                                        break;
                                }
                        }
                }
    }

   /**
        * returns the error level of the error - corresponds to the PHP
        * error levels (E_ALL, E_NOTICE...)
        *
        * @access        public
        * @return        int $level        The error level
        * @see                $level
        */
    function getLevel()
    {
        return  $this->level;
    }


   /**
        * retrieves the error message
        *
        * @access        public
        * @return        string         $msg        The stored error message
        * @see                $message
        */
    function getMessage()
    {
                return $this->message;
    }

   /**
        * retrieves the additional error information (information usually
        * only relevant for developers)
        *
        * @access        public
        * @return        mixed $info        The additional information
        * @see                $info
        */
    function getInfo()
    {
                return $this->info;
    }

   /**
        * recieve error code
        *
        * @access        public
        * @return        string|integer                error code (may be a string or an integer)
        * @see                $code
        */
    function getCode()
    {
                return $this->code;
    }

   /**
        * get the backtrace
        *
        * This is only possible, if debug_backtrace() is available.
        *
        * @access        public
        * @return        array backtrace
        * @see                $backtrace
        */
    function getBacktrace()
    {
                return $this->backtrace;
    }

   /**
        * get the filename in which the error occured
        *
        * This is only possible, if debug_backtrace() is available.
        *
        * @access        public
        * @return        string filename
        * @see                $file
        */
    function getFile()
    {
                return $this->file;
    }

   /**
        * get the line number in which the error occured
        *
        * This is only possible, if debug_backtrace() is available.
        *
        * @access        public
        * @return        integer line number
        * @see                $line
        */
    function getLine()
    {
                return $this->line;
    }
}
?>