3

我有一个类,我有一个动态创建的函数(通过“create_function”创建),但我找不到方法告诉 PHP 我希望仅为这个类创建这个函数(类函数),因此新的函数无法访问对象属性。看看下面的代码:

class Test {
  private $var=1;

  function __construct() {
      call_user_func(create_function('', 'echo $this->var;'));
  }
}

new Test;

这会引发错误“致命错误:不在 D:\WWW\index.php(7) 的对象上下文中使用 $this:第 1 行运行时创建的函数”

4

2 回答 2

4

你可能想要runkit_method_add,不是create_function

于 2012-10-04T19:24:40.813 回答
3

从 php 5.4 开始,匿名函数也在$this其上下文中。在魔术_call方法的帮助下,可以将闭包作为方法添加到类中,而无需额外的代码:

class Test
{
  private $var = 1;

  function __construct()
  {
    $this->sayVar = function() { echo $this->var; };
  }

  public function __call( $method, $args )
  {
    if ( property_exists( $this, $method ) ) {
      if ( is_callable( $this->$method ) ) {
        return call_user_func_array( $this->$method, $args );
      }
    }
  }

}

$test = new Test();
$test->sayVar(); // echos 1
于 2012-10-04T19:25:15.513 回答