【问题标题】:How would I call a method from a class with a variable?如何从具有变量的类中调用方法?
【发布时间】:2010-10-30 12:41:10
【问题描述】:

鉴于这个类:

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 语句。

谢谢!

【问题讨论】:

  • 这可以使用对象来完成,您可以为每个项目设置类,每个项目都可以符合相同的接口,然后有一个 order() 方法将采用 OrderItem 对象,该对象可以是BurritoOrderItem 或 TacoOrderItem。当需要反射或有可变方法调用时,我总是畏缩,这对我来说并不干净。

标签: php oop variable-variables


【解决方案1】:

够简单

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

【讨论】:

    【解决方案2】:

    这样的事情怎么样?

    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】:

    我认为call_user_func 是您正在寻找的:

    http://us3.php.net/call_user_func

    您可以将您建议的字符串传递给它。有关调用类的方法,请参见示例 #3。

    【讨论】:

      【解决方案4】:
      $lunch->{'order_' . $myOrder}();
      

      我同意这个设计有点不确定,但至少是这样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-03
        • 2015-09-12
        • 2012-05-05
        • 1970-01-01
        • 2021-03-15
        • 1970-01-01
        • 2020-06-10
        • 2015-03-01
        相关资源
        最近更新 更多