如何上课#39; "公共"来自其定义的实例

时间:2016-09-05 11:10:10

标签: php oop

在课程的定义中'方法我包括一个外部文件。我希望这个外部文件无法访问$this,但只能访问" public"实例,即只有公共方法和属性。

到目前为止,我尝试使用匿名函数call_user_func,其方法返回$this

我已经看到我可以在我的匿名函数中取消$this而不改变其余的执行,但我还没有找到一种方法来获取我想要的实例。我想我可以尝试取消匿名函数中的所有非公共属性和方法,但我想知道是否有更简单的方法。

Class Foo{
    private $test = 23;

    public function getFoo(){
      return $this;
    }

    public function inclFile($file){
      $foo = call_user_func([$this, 'getFoo']);
      $r = function()use($foo){
        unset($this);
        var_dump($foo->test); // i am getting it!
        require($file);
      };
      $r();
      // Here $this is still set
    }
}

1 个答案:

答案 0 :(得分:2)

我会稍微改变设计,并创建此功能(并将其放置在任何地方):

function access_object_in_file($file_to_require, $object) {
    require $file_to_require;
}

这会将文件的范围限制为只能访问$object。由于PHP是PHP,因此您的文件将被允许创建反射类,解析跟踪等,但变量范围仅限于$object

如果你不希望任何类型的对象传递给函数,我会为它添加一个接口并输入提示,例如:

// let's pretend we're in a view layer
function render($view_file, Properties $object) {
    require $file_to_require;
}