在类方法的定义中,我包含了一个外部文件。我希望这个外部文件不能访问$this,但只能访问“公共”实例,即只能访问公共方法和属性。
到目前为止,我已经尝试使用匿名函数,带有返回$this的方法的call_user_func。
我已经看到,我可以在匿名函数中取消设置$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
}
}发布于 2016-09-05 19:20:37
我会稍微改变一下设计,然后创建这个函数(并把它放在任何地方):
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;
}https://stackoverflow.com/questions/39329325
复制相似问题