-
-
Notifications
You must be signed in to change notification settings - Fork 220
Closed
Description
Version: all
Bug Description
No properties dumping for instances extended from SPL \ArrayObject:
https://www.php.net/manual/en/class.arrayobject
There is no variable content rendered by dump()/bdump()
functions for instances extended from SPL class \ArrayObject.
Steps To Reproduce
class Config extends \ArrayObject {
// ...
protected $fullPath = NULL;
protected $store = [];
public function __construct ($fullPath, $data) {
$this->fullPath = $fullPath;
$this->store = $data;
}
public function __get ($key) {
if (array_key_exists($key, $this->store))
return $this->store[$key];
return NULL;
}
public function __set ($key, $value) {
return $this->store[$key] = $value;
}
public function __isset ($key) {
return isset($this->store[$key]);
}
public function __unset ($key) {
if (isset($this->store[$key]))
unset($this->store[$key]);
}
public function getIterator () {
return new \ArrayIterator($this->store);
}
public function offsetSet ($offset, $value) {
if ($offset === NULL) {
$this->store[] = $value;
} else {
$this->store[$offset] = $value;
}
}
public function offsetGet ($offset) {
return isset($this->store[$offset])
? $this->store[$offset]
: NULL;
}
public function offsetExists ($offset) {
return isset($this->store[$offset]);
}
public function offsetUnset ($offset) {
unset($this->store[$offset]);
}
public function count () {
return count($this->store);
}
}
// let's create and instanceof class `Config`:
$cfg = new Config(__DIR__ . '/cfg.ini', [
'ga' => true,
'db' => [
'driver'=> 'mysql',
'host' => 'localhost',
'port' => 3306,
'db' => 'cdcol',
'pass' => NULL
]
]);
echo '<pre>';
// working ok in loops and other:
$cfg['something'] = 'more';
dump(count($cfg));
dump(isset($cfg['ga']));
dump(isset($cfg['something']));
unset($cfg['something']);
dump(isset($cfg['something']));
foreach ($cfg as $key => $value) {
dump([$key, $value]);
}
// Working OK to dump it by simple `var_dump()`:
//var_dump($cfg);
// but it's not possible to dump with tracy:
dump($cfg);
bdump($cfg);Expected Behavior
The expected behaviour is to dump Config::$fullPath
and Config::$store properties like var_dump() does.
Possible Solution
In class: Dumper
Method: exportObject()
The method could be changed like this:
//////////////// FIXED - return type `iterable` (PHP >= 7.1):
//private function exportObject($obj): array
private function exportObject($obj): iterable
{
foreach ($this->objectDumpers as $type => $dumper) {
if (!$type || $obj instanceof $type) {
return $dumper($obj);
}
}
if ($this->debugInfo && method_exists($obj, '__debugInfo')) {
return $obj->__debugInfo();
}
//////////////// ADDED - condition:
if ($obj instanceof \ArrayObject) return $obj;
return (array) $obj;
}Metadata
Metadata
Assignees
Labels
No labels