ID: 34986 User updated by: [EMAIL PROTECTED] Reported By: [EMAIL PROTECTED] Status: Open Bug Type: Feature/Change Request Operating System: Irrelevant PHP Version: 5.1.0RC3 New Comment:
Revised patch, takes care of reference counting (thanks to Derick for pointing this out): Index: zend_builtin_functions.c =================================================================== RCS file: /repository/ZendEngine2/zend_builtin_functions.c,v retrieving revision 1.277.2.5 diff -u -b -B -r1.277.2.5 zend_builtin_functions.c --- zend_builtin_functions.c 16 Sep 2005 17:05:06 -0000 1.277.2.5 +++ zend_builtin_functions.c 26 Oct 2005 08:56:29 -0000 @@ -1913,6 +1913,9 @@ add_assoc_string_ex(stack_frame, "class", sizeof("class"), class_name, dup); } + add_assoc_zval_ex(stack_frame, "object", sizeof("object"), ptr->object); + ptr->object->refcount++; + add_assoc_string_ex(stack_frame, "type", sizeof("type"), "->", 1); } else if (ptr->function_state.function->common.scope) { add_assoc_string_ex(stack_frame, "class", sizeof("class"), ptr->function_state.function->common.scope->name, 1); Previous Comments: ------------------------------------------------------------------------ [2005-10-26 10:45:53] [EMAIL PROTECTED] The patch below seems to work. If it really does, this was too easy :-) Index: zend_builtin_functions.c =================================================================== RCS file: /repository/ZendEngine2/zend_builtin_functions.c,v retrieving revision 1.277.2.5 diff -u -b -B -r1.277.2.5 zend_builtin_functions.c --- zend_builtin_functions.c 16 Sep 2005 17:05:06 -0000 1.277.2.5 +++ zend_builtin_functions.c 26 Oct 2005 08:44:25 -0000 @@ -1914,6 +1914,7 @@ } add_assoc_string_ex(stack_frame, "type", sizeof("type"), "->", 1); + add_assoc_zval_ex(stack_frame, "object", sizeof("object"), ptr->object); } else if (ptr->function_state.function->common.scope) { add_assoc_string_ex(stack_frame, "class", sizeof("class"), ptr->function_state.function->common.scope->name, 1); add_assoc_string_ex(stack_frame, "type", sizeof("type"), "::", 1); ------------------------------------------------------------------------ [2005-10-26 09:40:49] [EMAIL PROTECTED] Just a clarification: [object] should contain a reference to the object, not an "Object id #x" string. That is only in the example output as that is what would happen for print_r(debug_backtrace()). ------------------------------------------------------------------------ [2005-10-26 06:53:59] [EMAIL PROTECTED] Description: ------------ For some Meta Programming it would be great if debug_backtrace() could return an [object] field (in addition to [class] that contains a reference to respective object. Reproduce code: --------------- <?php class A { private $b; public function __construct() { $this->b = new B; } public function aMethod() { $this->b->bMethod(); } } class B { public function bMethod() { print_r(debug_backtrace()); } } $a = new A; $a->aMethod(); ?> Expected result: ---------------- Array ( [0] => Array ( [file] => /home/sb/test.php [line] => 10 [function] => bMethod [class] => B [object] => <Object id #2> [type] => -> [args] => Array ( ) ) [1] => Array ( [file] => /home/sb/test.php [line] => 21 [function] => aMethod [class] => A [object] => <Object id #1> [type] => -> [args] => Array ( ) ) ) Actual result: -------------- Array ( [0] => Array ( [file] => /home/sb/test.php [line] => 10 [function] => bMethod [class] => B [type] => -> [args] => Array ( ) ) [1] => Array ( [file] => /home/sb/test.php [line] => 21 [function] => aMethod [class] => A [type] => -> [args] => Array ( ) ) ) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=34986&edit=1