我正在做某种块渲染器,其中模板是从Block的类渲染的。因为我想禁止使用$ this来保护视图中的修改块。
class Test
{
function __construct()
{
$data["somedata"] = [1,2,3,4];
$this->render("view.php", $data);
}
protected function render($file, $data = [])
{
$func = $this->closedRender($file, $data);
$func();
}
protected function closedRender($file, $data)
{
return function () use ($file, $data) {
### Here if I use $this I gent instance of "Test" what I don't want
extract($data);
require $file;
};
}
}
我怎样才能做到这一点?因为人们通常希望实现相反的目标而且我无法找到我的情况的答案
答案 0 :(得分:2)
你可以用这种方式。将匿名函数定义为static
Reference
注意:从PHP 5.4开始,可以静态声明匿名函数。
return static function() use ($file, $data)
{
extract($data);
require $file;
};
在静态功能中,如果您尝试使用print_r($this)
,您将获得。
注意:未定义的变量:此
您的整个代码将是这样的
class Test
{
function __construct()
{
$data["somedata"] = [1, 2, 3, 4];
$this->render("view.php", $data);
}
protected function render($file, $data = [])
{
$func = $this->closedRender($file, $data);
$func();
}
protected function closedRender($file, $data)
{
return static function() use ($file, $data)
{
extract($data);
require $file;
};
}
}