|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2008-06-24 20:23 UTC] lasse100 at planet dot nl
Description:
------------
As in function debug_backtrace(), the method Exception::getTrace() should return a array with a 'object' element, representing the current object.
The method Exception::getTrace() should also have a $provide_object parameter like the parameter in function debug_backtrace(), to disable the 'object'-element in the array.
Reproduce code:
---------------
<?php
class Foo {
public $bar;
public function __construct($bar) {
$this->bar = $bar;
echo 'debug_backtrace: <pre>';
var_dump(debug_backtrace());
echo '</pre>';
throw new Exception('Foo throws an exception!');
}
}
try {
$foo = new Foo('test');
} catch (Exception $e) {
echo 'Exception::getTrace(): <pre>';
var_dump($e->getTrace());
echo '</pre>';
}
?>
Expected result:
----------------
debug_backtrace:
array(1) {
[0]=>
array(7) {
["file"]=>
string(50) "C:\server\apache\htdocs\forum\htdocs\bugreport.php"
["line"]=>
int(13)
["function"]=>
string(11) "__construct"
["class"]=>
string(3) "Foo"
["object"]=>
object(Foo)#1 (1) {
["bar"]=>
string(4) "test"
}
["type"]=>
string(2) "->"
["args"]=>
array(1) {
[0]=>
&string(4) "test"
}
}
}
Exception::getTrace():
array(1) {
[0]=>
array(6) {
["file"]=>
string(50) "C:\server\apache\htdocs\forum\htdocs\bugreport.php"
["line"]=>
int(13)
["function"]=>
string(11) "__construct"
["class"]=>
string(3) "Foo"
["object"]=>
object(Foo)#1 (1) {
["bar"]=>
string(4) "test"
}
["type"]=>
string(2) "->"
["args"]=>
array(1) {
[0]=>
string(4) "test"
}
}
}
Actual result:
--------------
debug_backtrace:
array(1) {
[0]=>
array(7) {
["file"]=>
string(50) "C:\server\apache\htdocs\forum\htdocs\bugreport.php"
["line"]=>
int(13)
["function"]=>
string(11) "__construct"
["class"]=>
string(3) "Foo"
["object"]=>
object(Foo)#1 (1) {
["bar"]=>
string(4) "test"
}
["type"]=>
string(2) "->"
["args"]=>
array(1) {
[0]=>
&string(4) "test"
}
}
}
Exception::getTrace():
array(1) {
[0]=>
array(6) {
["file"]=>
string(50) "C:\server\apache\htdocs\forum\htdocs\bugreport.php"
["line"]=>
int(13)
["function"]=>
string(11) "__construct"
["class"]=>
string(3) "Foo"
["type"]=>
string(2) "->"
["args"]=>
array(1) {
[0]=>
string(4) "test"
}
}
}
PatchesException_getTrace_object_property (last revision 2010-06-13 08:43 UTC by jille at quis dot cx)Pull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 18:00:01 2025 UTC |
As a (hopefully) simple improvement to the current situation, would it be possible to have the class name of the object passed though? At the moment, the "class" is the class the function is defined in, which makes sense, but if it's a base class then there's no way to find out which derived class the exception was really thrown in. Example: -------- <?php class A { public function foo() { throw new Exception(); } } class B extends A { } $b = new B(); try { $b->foo(); } catch (Exception $e) { var_dump($e->getTrace()); } Expected result: ---------------- There should be a mention of "B" in the trace somewhere - in a new property "object_class" maybe? Actual Result: -------------- array(1) { [0]=> array(6) { ["file"]=> string(58) "c:\test.php" ["line"]=> int(19) ["function"]=> string(3) "foo" ["class"]=> string(1) "A" ["type"]=> string(2) "->" ["args"]=> array(0) { } } }