在课程的定义中'方法我包括一个外部文件。我希望这个外部文件无法访问$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
}
}
答案 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;
}