|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #71321 User __debugInfo method ignored for internal classes
Submitted: 2016-01-09 16:20 UTC Modified: 2018-08-13 08:04 UTC
Avg. Score:3.7 ± 0.7
Reproduced:4 of 5 (80.0%)
Same Version:0 (0.0%)
Same OS:1 (25.0%)
From: zaq178miami at gmail dot com Assigned:
Status: Duplicate Package: *General Issues
PHP Version: 7.0.2 OS: Debian GNU/Linux 8.2 (jessie)
Private report: No CVE-ID: None
 [2016-01-09 16:20 UTC] zaq178miami at gmail dot com
When user class extends internal class with get_debug_info object handler set and defined userland __debugInfo() method, that method totally ignored.

As a workaround, Z_OBJDEBUG macro may be changed to looks like

    #define Z_OBJDEBUG(zval,tmp)		(Z_OBJCE(zval)->__debugInfo?std_object_handlers.get_debug_info(&(zval),&tmp):(Z_OBJ_HANDLER((zval),get_debug_info)?Z_OBJ_HANDLER((zval),get_debug_info)(&(zval),&tmp):(tmp=0,Z_OBJ_HANDLER((zval),get_properties)?Z_OBJPROP(zval):NULL)))

From Bob Weinand notes:

Then comes a question about parent::__debugInfo() in userland __debugInfo() 
comes: should it be accessible? Should it return what get_debug_info returns? Or should get_debug_info moved to ce->__debugInfo (internally too)? BC?

Test script:
class CustomSplStorage extends SplObjectStorage {
    public function __debugInfo()
        return ['this is' => 'annoying'];

var_dump(new CustomSplStorage());
debug_zval_dump(new CustomSplStorage());

Expected result:
object(CustomSplStorage)#1 (1) {
  ["this is"]=>
  string(8) "annoying"
object(CustomSplStorage)#1 (1) refcount(1){
  ["this is"]=>
  string(8) "annoying" refcount(2)

Actual result:
object(CustomSplStorage)#1 (1) {
  array(0) {
object(CustomSplStorage)#1 (1) refcount(1){
  array(0) refcount(1){


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2016-01-09 16:22 UTC] zaq178miami at gmail dot com
This is not about just SPL (, but about all internal classes that set their get_debug_info.
 [2016-07-19 15:10 UTC]
-Summary: User __debugInfo method ignored +Summary: User __debugInfo method ignored for internal classes -Status: Open +Status: Assigned -Assigned To: +Assigned To: bishop
 [2017-10-24 06:04 UTC]
-Status: Assigned +Status: Open -Assigned To: bishop +Assigned To:
 [2018-08-13 08:01 UTC] zerterone at gmail dot com
duplicate of #69264
 [2018-08-13 08:04 UTC]
-Status: Open +Status: Duplicate
 [2018-08-13 08:04 UTC]
Mentioning bug #69264 for linkage.
PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Mon Sep 20 21:03:37 2021 UTC