将函数分配给类的属性

时间:2016-04-13 17:09:34

标签: php function class

我尝试做类似PHP anonymous function assigned to class property in constructor is always null?的事情,但我的解决方案似乎更简单。我希望Stack Overflow Hot Shots对此解决方案的评论以及是否有更好的评论。这是一种最佳实践'问题

我想将一个函数(匿名或定义)传递给一个类/对象,以后能够调用该函数。我从这开始:

function Foo($arg) {return sprintf('In Foo(%s)',$arg);}
function Bar($arg) {return sprintf('In Bar(%s)',$arg);}

class TestIt {
  private $func;

  public function __construct( $func ) { $this->func = $func; }

  public function OutPut($arg) {
    return $this->func($arg);
  }
}

$test  = new TestIt('Foo');
echo $test->OutPut('Bozo');

运行此操作时,我收到方法$this->func不存在的错误。如果我在方法is_callable中放置OutPut()测试,我发现$this->func实际上是可调用的,但错误仍然存​​在。

但是,如果我使用is_callable的第三个参数,我可以正常工作。

public function OutPut($arg) {
  return is_callable($this->func,false,$tmpfunc) ? $tmpfunc($arg) : null;
}

这如何作为解决方案叠加?好奇你的想法。

1 个答案:

答案 0 :(得分:2)

因为没有办法让PHP将$this->func()解析为变量函数,所以你有两个选择:

return call_user_func_array($this->func, array($arg));

或者:

$func = $this->func;
return $func($arg);

is_callable()将返回静态方法调用someClass::someMethod,即使它不是静态方法并且在对象范围内调用。