提问人:Ryan Florence 提问时间:6/2/2009 更新时间:6/2/2009 访问量:1126
如何从带有变量的类中调用方法?
How would I call a method from a class with a variable?
问:
给定这个类:
class Tacobell{
public function order_taco(){
echo "3 Tacos, thank you.";
}
public function order_burrito(){
echo "Cheesy bean and rice, please";
}
}
$lunch = new Tacobell;
$lunch->order_burrito();
$lunch->order_taco();
我该如何做这样的事情?
$myOrder = 'burrito';
$lunch->order_.$myOrder;
显然,该代码是笨拙的 - 但显示了我试图做的事情,而不是试图解释它。
也许我做错了。我想到了一个带有 switch 语句的方法,传入墨西哥卷饼或炸玉米饼,然后从那里调用正确的方法。但是我必须从一开始就知道结尾,我可能有很多方法,我宁愿不必每次都更新 switch 语句。
谢谢!
答:
3赞
Paolo Bergantino
6/2/2009
#1
$lunch->{'order_' . $myOrder}();
我确实同意设计有点不稳定,但至少是这样做到的。
2赞
kris
6/2/2009
#2
我认为这就是你要找的:call_user_func
https://www.php.net/call_user_func
您可以将您建议的字符串传递给它。请参阅示例 #3 调用类的方法。
5赞
rodion
6/2/2009
#3
像这样的事情怎么样?
class Tacobell {
public function order_burrito() {
echo "Bladibla.\n";
}
public function order($item) {
if (method_exists($this, "order_$item")) {
$this->{'order_' . $item}();
} else {
echo "Go away, we don't serve $item here.\n";
}
}
}
你会用 $lunch->order('burrito');来称呼它,这对我来说看起来更干净。它把所有的丑陋都放在了 Tacobell::order 方法中。
评论
0赞
Ryan Florence
6/2/2009
到目前为止,所有的答案都是我需要的,但这是我一直在寻找的。谢谢大家。我仍然不确定这是我想要的方式,但就目前而言,它从我的代码中获得了最大的重用率。
0赞
Ozzy
6/2/2009
#4
很简单
$order = 'order_burrito';
$lunch->$order();
下一个:echo 变量变量名称
评论