|
Posted by Joseph Crawford on 03/18/05 22:23
Hello Everyone,
I am not sure if this is the expected results or not, however i think it
wouldnt be.
i have a main exception class called SvEx that extends the built in
Exception class
<?php
/**
* The SvEx class
*
* This is the exception class for the main Application
*
* @author Joseph Crawford Jr. <codebowl@gmail.com>
* @copyright Codebowl Solutions 2005
* @package SimonVolkov
* @subpackage Exceptions
*
**/
class SvEx extends Exception {
const ERR_TYPE = "Unknown Error";
const ERR_DESC = "There has been an error. This error has been logged.
Please try again in a few minutes.";
protected $_msg;
protected $_tpl;
protected $_error;
public function __construct( $error = null ) {
$this->_error = array(
'type' => self::ERR_TYPE,
'description' => self::ERR_DESC
);
$this->_tpl = Application::Template();
$this->_tpl->assign( 'error_type', $this->_error['type'] );
$this->_tpl->assign( 'error_description', $this->_error['description'] );
$this->_msg = $error;
parent::__construct($this->_msg);
}
public function Display($file, $line) {
$this->_tpl->assign('admin', 1);
$this->_tpl->assign('msg', $this->_msg);
$file = explode('\\', $file);
$top = count( $file ) - 1;
$file = '/' . $file[$top-1] . '/' . $file[$top];
$this->_tpl->assign('__FILE__', $file);
$this->_tpl->assign('__LINE__', $line);
$this->_tpl->display('error.tpl');
}
}
?>
Now with this class notice the Constants i have for the class. This class
is then extended by another class the ApplicationEx class
<?php
/**
* The ApplicationEx class
*
* This is the exception class for the main Application class
*
* @author Joseph Crawford Jr. <codebowl@gmail.com>
* @copyright Codebowl Solutions 2005
* @package SimonVolkov
* @subpackage Exceptions
*
**/
class ApplicationEx extends SvEx {
const ERR_TYPE = "Application Error";
const ERR_DESC = "An Application Error!";
public function __construct( $msg = null ) {
$this->_error['type'] = self::ERR_TYPE;
$this->_error['description'] = self::ERR_DESC ;
parent::__construct($msg);
}
}
?>
Now please notice how this class has declared 2 constants for the error type
and description. I know that in the first class it has constants so it
cannot be "changed" however with these classes i dont get an error of trying
to redeclare a constant that is already declared, nor does it give the
expected results.
Here is a case of throwing an ApplicationEx exception
<?php
if( ( isset( $dbinfo['type'] ) && $dbinfo['type'] != "" ) && ( isset(
$dbinfo['host'] ) && $dbinfo['host'] != "" ) && ( isset(
$dbinfo['database'] ) && $dbinfo['database'] != "" ) ) {
self::$_db = new $dbinfo['type']($dbinfo['host'], $dbinfo['database'],
$dbinfo['user'], $dbinfo['pass']);
} else {
throw new ApplicationEx("Could not instanciate the database object, you
must specify the database type, hostname and database name.");
}
?>
Now what i would expect would be for this code to set $this->_error['type']
to "Application Error" since in the application class i used self::ERR_TYPE
and not parent::ERR_TYPE. However it uses the constant from the SvEx class
and set's $this->_error['type'] = "Unknown Error"
here is a page where you can see the results.
http://codebowl.homelinux.net:8001/clients/JVMedia/SimonVolkov/global.php
Any help would be appreciated.
Joe Crawford
Codebowl Solutions
codebowl at NO SPAM gmail dot com
Navigation:
[Reply to this message]
|