php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #32370 Object Constants
Submitted: 2005-03-19 00:57 UTC Modified: 2005-03-19 12:47 UTC
From: codebowl at gmail dot com Assigned:
Status: Not a bug Package: Class/Object related
PHP Version: 5.0.3 OS: *
Private report: No CVE-ID: None
 [2005-03-19 00:57 UTC] codebowl at gmail dot com
Description:
------------
I have 2 class files, one that extends the built in Exceptions class and one that extends this class

Built In Exceptions
|
|
+- SvEx Class
 |
 |
 +- ApplicationEx Class

The problem lies in class constants.

The SvEx class and Application Class both have thier own constants named ERR_TYPE and ERR_DESC for some reason when i throw an ApplicationEx Exception it is using the constants from the SvEx Exception class.


Reproduce code:
---------------
You can see the code files here

http://codebowl.dontexist.net/source/ScEx.phps
http://codebowl.dontexist.net/source/Application.phps
http://codebowl.dontexist.net/source/Trigger.phps

Expected result:
----------------
I would expect that it would set the $this->_error['type'] and ['desc'] with the appropriate constant values. When i throw an ApplicationEx it should use the ApplicationEx::ERR_TYPE etc..

Everything else set's properly such as the error message blah blah, you can see an example of the results here

http://codebowl.dontexist.net/clients/JVMedia/SimonVolkov/global.php

Actual result:
--------------
For some reason it is setting them to the values in the SvEx Exception Class

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2005-03-19 00:58 UTC] codebowl at gmail dot com
http://codebowl.dontexist.net/source/SvEx.phps

is the url to the SvEx class file, there was a typo with the Sc part of the filename.
 [2005-03-19 12:17 UTC] tony2001@php.net
Could you provide a smaller. but still working & complete reproduce script, please ?
 [2005-03-19 12:47 UTC] helly@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

The code part that deals with consts is correct as the test script below shows. I guess you are accessing both
through 'error_type' of $this->_tpl if that's the case rethink your logic. If not rethink what you thought was the error and check your code again.

--TEST--
Bug #32370 (Object Constants)
--FILE--
<?php

class SvEx extends Exception
{
	const ERR_TYPE = "Unknown Error";
	const ERR_DESC = "There has been an error.";

	protected $_msg;
	protected $_error;

	public function __construct($error = null)
	{
		$this->_error = array(
			'type' => self::ERR_TYPE,
			'description' => self::ERR_DESC
			);

		$this->_msg = $error;

		parent::__construct($this->_msg);
	}
	
	public function getType()
	{
		return $this->_error['type'];
	}

	public function getDesc()
	{
		return $this->_error['description'];
	}
}

class ApplicationEx extends SvEx
{
	const ERR_TYPE = "Application Error";
	const ERR_DESC = "An Application Error!";

	public function __construct($msg = null)
	{
		parent::__construct($msg);

		$this->_error['type'] = self::ERR_TYPE;
		$this->_error['description'] = self::ERR_DESC ;
	}
}

try
{
	throw new SvEx();
}
catch(Exception $e)
{
	echo "Type: " . $e->getType() . "\n";
	echo "Desc: " . $e->getDesc() . "\n";
}

try
{
	throw new ApplicationEx();
}
catch(Exception $e)
{
	echo "Type: " . $e->getType() . "\n";
	echo "Desc: " . $e->getDesc() . "\n";
}

?>
===DONE===
--EXPECT--
Type: Unknown Error
Desc: There has been an error.
Type: Application Error
Desc: An Application Error!
===DONE===

 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Dec 26 22:01:28 2024 UTC