Я нашел решение.По сути, я использовал статическую функцию Closure::bind
для привязки класса класса вызывающей стороны и функцию extract
для привязки любой локальной переменной из вызывающей области.Вот как:
class A
{
function myA()
{
// ambit variables of myA and class B here like:
$foo = "bar";
$myLocalVars = ['foo' => $bar];
$B = new B();
$B->myB($this, $myLocalVars);
}
}
class B
{
function myB($classAmbit, $localVars)
{
$closure = function () use ($localVars)
{
// With extract any local var from caller's ambit is now accesible here
extract($localVars);
return include("file.php");
}
// With Closure::bind, the $this from caller is now accesible in the closure,
// also any of their members, i.e protected, private and public members
$closureBinded = Closure::bind ($closure, $classAmbit, get_class($classAmbit));
return $closureBinded();
}
}