Как бы я вызвал метод из класса с переменной?
Учитывая этот класс:
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, передал в burrito или taco, а затем вызвал правильный метод оттуда. Но затем я должен знать конец с самого начала, и у меня может быть много методов, и я бы предпочел не обновлять оператор switch каждый раз.
Спасибо!
4 ответа
Как насчет этого?
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.
$lunch->{'order_' . $myOrder}();
Я согласен с тем, что дизайн немного сомнительный, но, по крайней мере, так оно и есть.
Я думаю call_user_func
это то, что вы ищете:
http://us3.php.net/call_user_func
Вы можете передать строку, которую вы предложили. См. Пример № 3 для вызова метода класса.