标签:php
我最近研究过一些代码,我必须在类中动态调用一个方法.
我最终使用的解决方案是2行,因为“动态”部分只是我需要调用的实际方法名称的一小部分.
这是我最终使用的解决方案:
$pull = "pull_{$type}_day";
$day = $download->$pull();
最初,我试图让这一行,但它没有用.从技术意义上讲,为什么上面的代码有效但下面的代码没有?
$day = $download->"pull_{$type}_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
这与PHP允许您使用字符串作为变量的方式相同,例如:
$foo = 'bar';
echo ${"foo"};
输出
bar
同样的语法.
标签:php
来源: https://codeday.me/bug/20190527/1161381.html