对于函数我可以将函数名称赋给字符串变量,但是如何为类方法执行呢?
$func = array($this, 'to' . ucfirst($this->format));
$func(); // fails in PHP 5.3
这似乎有效:
$this->{"to{$this->format}"}();
但这对我来说太长了。我需要多次调用这个函数......
答案 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()
。
变量函数太长是什么意思?