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
的值)