10000 feature #19630 [VarDumper] Enhance dumping __PHP_Incomplete_Class obj… · symfony/symfony@f56ba63 · GitHub
[go: up one dir, main page]

Skip to content

Commit f56ba63

Browse files
committed
feature #19630 [VarDumper] Enhance dumping __PHP_Incomplete_Class objects (nicolas-grekas)
This PR was merged into the 3.2-dev branch. Discussion ---------- [VarDumper] Enhance dumping __PHP_Incomplete_Class objects | Q | A | ------------- | --- | Branch? | master | Bug fix? | no | New feature? | yes | BC breaks? | no | Deprecations? | no | Tests pass? | no | Fixed tickets | - | License | MIT | Doc PR | - Before: ``` __PHP_Incomplete_Class { +"__PHP_Incomplete_Class_Name": "Foo\Buzz" } ``` after: ``` __PHP_Incomplete_Class(Foo\Buzz) {} ``` The new output is less confusing: no dynamic property exists on incomplete class objects, yet the `+` prefix suggests that. Commits ------- ee20d15 [VarDumper] Enhance dumping __PHP_Incomplete_Class objects
2 parents 5cc9ed2 + ee20d15 commit f56ba63

File tree

3 files changed

+30
-0
lines changed

3 files changed

+30
-0
lines changed

src/Symfony/Component/VarDumper/Caster/Caster.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
namespace Symfony\Component\VarDumper\Caster;
1313

14+
use Symfony\Component\VarDumper\Cloner\Stub;
15+
1416
/**
1517
* Helper for filtering out properties in casters.
1618
*
@@ -50,6 +52,9 @@ public static function castObject($obj, \ReflectionClass $reflector)
5052
} else {
5153
$a = (array) $obj;
5254
}
55+
if ($obj instanceof \__PHP_Incomplete_Class) {
56+
return $a;
57+
}
5358

5459
if ($a) {
5560
$p = array_keys($a);
@@ -119,4 +124,12 @@ public static function filter(array $a, $filter, array $listedProperties = array
119124

120125
return $a;
121126
}
127+
128+
public static function castPhpIncompleteClass(\__PHP_Incomplete_Class $c, array $a, Stub $stub, $isNested)
129+
{
130+
$stub->class .= '('.$a['__PHP_Incomplete_Class_Name'].')';
131+
unset($a['__PHP_Incomplete_Class_Name']);
132+
133+
return $a;
134+
}
122135
}

src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
abstract class AbstractCloner implements ClonerInterface
2323
{
2424
public static $defaultCasters = array(
25+
'__PHP_Incomplete_Class' => 'Symfony\Component\VarDumper\Caster\Caster::castPhpIncompleteClass',
26+
2527
'Symfony\Component\VarDumper\Caster\CutStub' => 'Symfony\Component\VarDumper\Caster\StubCaster::castStub',
2628
'Symfony\Component\VarDumper\Caster\CutArrayStub' => 'Symfony\Component\VarDumper\Caster\StubCaster::castCutArray',
2729
'Symfony\Component\VarDumper\Caster\ConstStub' => 'Symfony\Component\VarDumper\Caster\StubCaster::castStub',

src/Symfony/Component/VarDumper/Tests/CliDumperTest.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,21 @@ public function testBuggyRefs()
461461
);
462462
}
463463

464+
public function testIncompleteClass()
465+
{
466+
$unserializeCallbackHandler = ini_set('unserialize_callback_func', null);
467+
$var = unserialize('O:8:"Foo\Buzz":0:{}');
468+
ini_set('unserialize_callback_func', $unserializeCallbackHandler);
469+
470+
$this->assertDumpMatchesFormat(
471+
<<<EOTXT
472+
__PHP_Incomplete_Class(Foo\Buzz) {}
473+
EOTXT
474+
,
475+
$var
476+
);
477+
}
478+
464479
private function getSpecialVars()
465480
{
466481
foreach (array_keys($GLOBALS) as $var) {

0 commit comments

Comments
 (0)
0