Nasıl bir değişken ile bir sınıftan bir yöntem çağırır?

4 Cevap php

Bu sınıf göz önüne alındığında:

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();

Böyle bir şey nasıl olur?

$myOrder = 'burrito';
$lunch->order_.$myOrder;

Açıkçası bu kod ranza - ama o uzakta anlatmaya çalışırken daha iyi yapmak için çalışılıyor ne olduğunu gösterir.

Ve belki de bu yanlış hakkında gidiyorum. Ben oradan sağ yöntemini çağırın, börek veya taco geçmek, bir switch deyimi ile bir yöntem düşündüm. Ama sonra başından sonunu bilmek zorunda, ve ben potansiyel yöntemlerin çok olabilir ve ben oldukça her switch deyimi güncelleştirmek istemem.

Teşekkürler!

4 Cevap

Nasıl böyle bir şey?

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";
        }
    }
}

Sen $ öğle> düzeni ('börek') kullanarak çağırır, bana çok temiz görünüyor ki. Bu yöntem TacoBell tüm uglyness koyar :: sırası.

$lunch->{'order_' . $myOrder}();

Ben tasarımı biraz şüpheli olduğuna katılıyorum, ama en azından bunu yapmak için nasıl.

I call_user_func aradığınız ne olduğunu düşünüyorum:

http://us3.php.net/call_user_func

Bunu size önerilen dize iletebilirsiniz. Bir sınıfın bir yöntem çağırmak için örnek # 3 bkz.

Yeterince basit

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