[VarDumper] Add catch-all-objects hook for casters

This commit is contained in:
Nicolas Grekas 2015-03-18 09:21:33 +01:00
parent 59ca5b3af9
commit 5999964151
2 changed files with 51 additions and 1 deletions

View File

@ -192,7 +192,7 @@ abstract class AbstractCloner implements ClonerInterface
$class,
method_exists($class, '__debugInfo'),
new \ReflectionClass($class),
array_reverse(array($class => $class) + class_parents($class) + class_implements($class)),
array_reverse(array('*' => '*', $class => $class) + class_parents($class) + class_implements($class)),
);
$this->classInfo[$class] = $classInfo;

View File

@ -131,6 +131,56 @@ Symfony\Component\VarDumper\Cloner\Data Object
[useRefHandles:Symfony\Component\VarDumper\Cloner\Data:private] => -1
)
EOTXT;
$this->assertStringMatchesFormat($expected, print_r($clone, true));
}
public function testCaster()
{
$cloner = new VarCloner(array(
'*' => function ($obj, $array) {
$array['foo'] = 123;
return $array;
},
__CLASS__ => function ($obj, $array) {
return array();
},
));
$clone = $cloner->cloneVar($this);
$expected = <<<EOTXT
Symfony\Component\VarDumper\Cloner\Data Object
(
[data:Symfony\Component\VarDumper\Cloner\Data:private] => Array
(
[0] => Array
(
[0] => Symfony\Component\VarDumper\Cloner\Stub Object
(
[type] => object
[class] => %s
[value] =>
[cut] => 0
[handle] => %d
[refCount] => 0
[position] => 1
)
)
[1] => Array
(
[foo] => 123
)
)
[maxDepth:Symfony\Component\VarDumper\Cloner\Data:private] => 20
[maxItemsPerDepth:Symfony\Component\VarDumper\Cloner\Data:private] => -1
[useRefHandles:Symfony\Component\VarDumper\Cloner\Data:private] => -1
)
EOTXT;
$this->assertStringMatchesFormat($expected, print_r($clone, true));
}