PHP:禁止在匿名函数中使用$ this

时间:2017-06-01 09:44:07

标签: php

我正在做某种块渲染器,其中模板是从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;
          };
     }
}

我怎样才能做到这一点?因为人们通常希望实现相反的目标而且我无法找到我的情况的答案

1 个答案:

答案 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;
        };
    }

}