Как бы я вызвал метод из класса с переменной? - PullRequest
2 голосов
/ 02 июня 2009

Учитывая этот класс:

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 ]

5 голосов
/ 02 июня 2009

Как насчет этого?

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.

3 голосов
/ 02 июня 2009
$lunch->{'order_' . $myOrder}();

Я согласен, что дизайн немного ненадежный, но, по крайней мере, так оно и есть.

2 голосов
/ 02 июня 2009

Я думаю call_user_func - это то, что вы ищете:

http://us3.php.net/call_user_func

Вы можете передать строку, которую вы предложили. См. Пример № 3 для вызова метода класса.

0 голосов
/ 02 июня 2009

достаточно просто

$order = 'order_burrito';
$lunch->$order();
...