在复杂的应用程序中创建自己的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,计算等...)。
答案 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.
然后您不必将方法名称传递给另一种方法。