指向方法的变量函数名称

时间:2013-03-30 20:33:22

标签: php function variables

对于函数我可以将函数名称赋给字符串变量,但是如何为类方法执行呢?

$func = array($this, 'to' . ucfirst($this->format));
$func(); // fails in PHP 5.3

这似乎有效:

$this->{"to{$this->format}"}();

但这对我来说太长了。我需要多次调用这个函数......

3 个答案:

答案 0 :(得分:1)

那不是真正的功能吗?为什么不使用标准方法进行功能?

function func() {
$func = array($this, 'to' . ucfirst($this->format));
return $func;
}

然后用

输出
func();

答案 1 :(得分:1)

您可以使用call_user_func

class A
{

  function thisIsAwesome()
  {
    return 'Hello';
  }

}

$a = new A;

$awesome = 'IsAwesome';

echo call_user_func(array($a, 'this' . $awesome));

虽然它还很长。您可以编写自己的函数来执行此操作:

function call_method($a, $b)
{
  return $a->$b();
}

$a = new A;

$awesome = 'IsAwesome';

echo call_method($a, 'this' . $awesome);

这是一个更短的垃圾。

答案 2 :(得分:1)

一种选择是使用php的call_user_func_array();

示例:

call_user_func_array(array($this, 'to' . ucfirst($this->format)), array());

您还可以将self关键字或类名与scope resolution operator一起使用。

示例:

$name = 'to' . ucfirst($this->format);
self::$name();

className::$name();

但是,您使用php variable functions发布的内容也完全有效:

$this->{"to{$this->format}"}();

call_user_func_array()可能被认为比使用变量函数更具可读性,但从我所读过的内容(如here)开始,变量函数往往会执行call_user_func_array()

变量函数太长是什么意思?