gpt4 book ai didi

php - 如何从评估范围中删除 $this?

转载 作者:可可西里 更新时间:2023-11-01 00:09:36 24 4
gpt4 key购买 nike

我正在编写简单的模板引擎和堆栈问题:$this 即使在取消设置后仍落入 eval 范围。

class foo
{

public function method()
{
$code = 'var_dump(isset($this));';
unset($this);
var_dump(isset($this)); // produce: boolean false
eval($code); // produce: boolean true
}

}

$foo = new foo;
$foo ->method();

如何在不修改 $code 值的情况下避免这种情况?

最佳答案

我建议创建 unbound closure ,其中 $this 无法访问或可能被替换。

注意:

  1. Closure正如@invisal 提到的那样,s 自 PHP 5.3.0 起可用。
  2. Closure::bindTo自 PHP 5.4.0 起可用。
  3. Anonymous functions在 PHP 5.3.0 中不应从执行上下文继承 $this。自 PHP 5.4.0 起启用。只需从下面的 PHP 5.3.0 示例中删除 $evUl = $evUl->bindTo(null);,它将按预期工作。

示例:

<?php
header('Content-Type: text/plain');

class foo {
public function method() {
$code = 'var_dump(isset($this));';

$evUl = function()use($code){ eval($code); };
$evUl = $evUl->bindTo(null);
$evUl();
}
}

$foo = new foo();
$foo->method();
?>

显示:

bool(false)

关于php - 如何从评估范围中删除 $this?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17078117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com