Php 动态调用类中的方法

Php 动态调用类中的方法,php,Php,我最近编写了一些代码,其中我必须在类中动态调用一个方法 我最终使用的解决方案是两行,因为“动态”部分只是我需要调用的实际方法名称的一小部分 这就是我最终使用的解决方案: $pull = "pull_{$type}_day"; $day = $download->$pull(); 最初,我试图把它做成一行,但没有成功。从技术意义上讲,为什么上面的代码有效,而下面的代码无效 $day = $download->"pull_{$type}_day"(); 为什么不使用 我发现它更容易

我最近编写了一些代码,其中我必须在类中动态调用一个方法

我最终使用的解决方案是两行,因为“动态”部分只是我需要调用的实际方法名称的一小部分

这就是我最终使用的解决方案:

$pull = "pull_{$type}_day"; 
$day = $download->$pull();
最初,我试图把它做成一行,但没有成功。从技术意义上讲,为什么上面的代码有效,而下面的代码无效

$day = $download->"pull_{$type}_day"();
为什么不使用

我发现它更容易阅读和解析

假设你有:

类拉力{
公共活动拉福日(){
回音“你好”;
}
}
$pull=新pull();
$type=“foo”;
您可以简单地执行以下操作:

call_user_func([$pull,“pull{$type}\u day]”);
产出:

你好


查看它的工作情况。

如果您使用字符串或字符串的一部分作为方法(或属性),则需要在
{}
中将其包围起来,如下所示:

#property
echo $foo->{"bar"};

#method call
echo $foo->{"bar"}();
因此,如果您在字符串部分需要一个变量,这将遵循与任何普通字符串相同的规则

 echo $foo->{"bar".$bar}();
 echo $foo->{'bar'.$bar.'bar'}();
 echo $foo->{"bar{$bar}bar"}();
等等。这里有一个完整的例子

class foo{

    function pull_1_day(){
        echo "bar";
    }
}

$a = 1;

(new foo)->{"pull_{$a}_day"}();
输出

  bar
bar

这与PHP允许您使用字符串作为变量的方式相同,如下所示:

$foo = 'bar';
echo ${"foo"}; 
输出

  bar
bar


同样的语法。

试试这个-
$day=$download->{“pull{$type}\u day”}()
我知道这看起来有点“滑稽”,但PHP理解这样的事情
${“foo”}
等@ArtisticPhoenix确实有效内部括号需要确保
$type
不是
$type\u day
,因为PHP会认为这是一个变量,因为
是合法的。如果它是一个字符串,你可以做
{“some_method”}()
等等。我想你也可以在那里做连接
@artisticfenix是的,这是一个很好的答案。OP是在一行中询问如何做。@ternalhour call_user_func允许你做一行。其他的也一样。不管他们做了什么,其余的都必须事先设置好(必须事先知道
$type
$pull
的值)