Если вы используете PHP 5.4 или выше, вы можете привязать вызываемый к области вашего объекта вызов вызываемого пользовательского поведения. Так, например, если бы у вас была следующая настройка ..
function run_method($object, Closure $method)
{
$prop = uniqid();
$object->$prop = \Closure::bind($method, $object, $object);
$object->$prop->__invoke();
unset($object->$prop);
}
И вы работали в таком классе ..
class Foo
{
private $value;
public function getValue()
{
return $this->value;
}
}
Вы можете запустить свой собственный логики, как если бы вы работали из области вашего объекта
$foo = new Foo();
run_method($foo, function(){
$this->value = 'something else';
});
echo $foo->getValue(); // prints "something else"