PHP:如何在类中调用动态函数?

4

我正在尝试创建一个初始化函数,该函数将调用类中的多个函数。以下是一个快速示例:

$foo = new bar;
$foo->call('funca, do_taxes, initb');

通常情况下,使用call_user_func函数可以正常工作,但我真正想做的是在类内部执行此操作,我不知道如何做到这一点,以下是我的未能正常工作的代码示例:

class bar {
   public function call($funcs) {
       $funcarray = explode(', ', $funcs);
       foreach($funcarray as $func) {
          call_user_func("$this->$func"); //???
       }
   }
   private function do_taxes() {
       //...
   }
}

我该如何调用一个动态类函数?

4个回答

7

您需要使用一个数组,就像手册中的示例#4一样:

call_user_func(array($this, $func));

我倾向于使用call_user_func()call_user_func_array()而不是$this->$func() - mfonda

5

其实比你想象的简单得多,因为PHP允许像变量变量(以及变量对象成员名称)这样的东西:

foreach($funcarray as $func) {
    $this->$func();
}

谢谢你,Amber。我很高兴我能够连接两个并完成我的脚本。 - Tim N.

0

你所需要做的就是

$this->$func();

编辑 - 忽略上一篇文章,我有点匆忙并且误解了

您可以在本地或用户函数中使用类似于call_user_func的方法来执行类似操作。

function arf($a) {print("arf $a arf");}

$x = 'strlen';
$f2 = 'arf';

print($x('four')."\n");
$f2($arg1);

输出

4
arf  arf 

0

当我们想要检查类中是否存在某个函数/方法时,

可以使用以下方法:

在类内部...

 $class_func = "foo";

 if(method_exists($this , $class_func ) ){
    $this->$class_func();
  }

 public function foo(){
   echo " i am called ";
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接