PHP动态方法调用inquery

时间:2011-12-30 05:08:11

标签: php model-view-controller oop

在复杂的应用程序中创建自己的MVC框架时,我有一个问题。 我动态执行这样的函数:

<?php
class dyn {
  public function do_me() {
    echo "hello";
  }
  public function execute_other_method($var = 0) {
    if ($var != 0 && method_exists($this, $var)) {
      $this->$var();
    }
  }
}

$do_method = "do_me"; // this variable is usually from GET or POST, it's dynamically set anyway
$class = new dyn;
$class->execute_other_method($do_method); // echoes hello
?>

这完美无瑕,但我的问题是:它有任何缺点吗?

如果我能改进这种执行方法,我很乐意这样做。

现在我在本地PC上作为服务器执行复杂网页时平均得到0.0080s~0.0150s,最多0.0300s(网页包括db查询,preg_match / replace,计算等...)。

1 个答案:

答案 0 :(得分:1)

你有什么理由不使用__get方法吗?它的设计完全按照你上面所做的去做,除了调用execute_other_method而不是调用execute_other_method,你会调用

$class->do_me(); // this method exists and __get will call the method for you.

$class->other_method(); // this method doesn't exist, but __get can handle it without throwing an error.

然后您不必将方法名称传递给另一种方法。