Skip to content

Commit 4e7be9e

Browse files
committed
Dumper: can dump static Closure
1 parent ed215d8 commit 4e7be9e

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

src/PhpGenerator/Dumper.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,10 @@ private function dumpObject(&$var, array $parents, int $level): string
127127
return '\\' . get_class($var) . '::' . $var->name;
128128

129129
} elseif ($var instanceof \Closure) {
130+
$inner = Nette\Utils\Callback::unwrap($var);
131+
if (Nette\Utils\Callback::isStatic($inner)) {
132+
return '\Closure::fromCallable(' . $this->dump($inner) . ')';
133+
}
130134
throw new Nette\InvalidArgumentException('Cannot dump closure.');
131135
}
132136

tests/PhpGenerator/Dumper.dump().phpt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,16 @@ Assert::exception(function () {
127127

128128

129129
// closures
130+
Assert::same(
131+
"\\Closure::fromCallable('strlen')",
132+
$dumper->dump(Closure::fromCallable('strlen'))
133+
);
134+
135+
Assert::same(
136+
"\\Closure::fromCallable(['Nette\\PhpGenerator\\ClassType', 'from'])",
137+
$dumper->dump(Closure::fromCallable([Nette\PhpGenerator\ClassType::class, 'from']))
138+
);
139+
130140
Assert::exception(function () {
131141
$dumper = new Dumper;
132142
$dumper->dump(function () {});

0 commit comments

Comments
 (0)