- var_dump: documentation ( source)
- get_defined_vars: documentation ( source)
- array_values: documentation ( source)
<?php
class struct {
private $args;
function __construct(array $args) {
$this->args = $args;
}
function __invoke(callable $signature = NULL) : array {
if ($signature === NULL)
return $this->signature(...array_values($this->args));
return $signature(...array_values($this->args));
}
}
final class Dinosaur extends struct {
function signature(int $legs) : array {
return get_defined_vars();
}
}
$two_legs = function(Dinosaur $dino) : Dinosaur {
$trex = $dino();
$trex['legs'] = 2;
return new Dinosaur($trex);
};
var_dump($two_legs(new Dinosaur([0])));