<?php
class ObjectNameGenerator
{
public function __invoke($object)
{
return $object->id;
}
}
class b extends a
{
public function __construct()
{
parent::setCallableGenerator(new ObjectNameGenerator());
}
}
class a
{
private $callableGenerator = null;
public function setCallableGenerator(callable $func)
{
$this->callableGenerator = $func;
}
public function build()
{
$object = new StdClass();
$object->id = 99;
if($this->callableGenerator !== null) {
return call_user_func($this->callableGenerator, $object);
} else {
return 'no callable function';
}
}
}
$b = new b();
$b->build();