首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从类的定义中获取类的"public“实例

如何从类的定义中获取类的"public“实例
EN

Stack Overflow用户
提问于 2016-09-05 19:10:10
回答 1查看 31关注 0票数 1

在类方法的定义中,我包含了一个外部文件。我希望这个外部文件不能访问$this,但只能访问“公共”实例,即只能访问公共方法和属性。

到目前为止,我已经尝试使用匿名函数,带有返回$this的方法的call_user_func。

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

代码语言:javascript
运行
复制
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
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-05 19:20:37

我会稍微改变一下设计,然后创建这个函数(并把它放在任何地方):

代码语言:javascript
运行
复制
function access_object_in_file($file_to_require, $object) {
    require $file_to_require;
}

这将限制文件的范围,使其只能访问$object。由于PHP是PHP,你的文件将被允许创建反射类,解析回溯跟踪等,但变量作用域仅限于$object

如果您不想将任何类型的对象传递给该函数,我将为其添加一个接口并键入提示,如下所示:

代码语言:javascript
运行
复制
// let's pretend we're in a view layer
function render($view_file, Properties $object) {
    require $file_to_require;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39329325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档