【发布时间】:2011-06-21 11:26:16
【问题描述】:
尽管有一些关于这个问题的讨论,但我想通过某些示例来检查什么是最好的方法。
我没有使用现有的解决方案,而是创建了自己的持久层(像许多人一样)
所以我的方法在这里也有问题。
对于 db 中的每个表,我都有具有适当的 getter 和 setter 以及一些强制方法的模型类。我还只创建了一个通用 DAO 类来处理所有类型的模型对象。
因此,例如,为了保存任何模型对象,我实例化了 genericDAO 类并调用我将模型对象作为属性传递的保存方法。
问题是,在运行时 genericDAO 类不知道它获取的模型对象以及其中存在哪些方法(getter 和 setter),因此我需要调用强制模型类方法,将属性列表检索为多个字符串数组。
例如,每个属性都有数组(table_column_name,attribute_name,is_string)。
当我调用保存函数时,它看起来像这样:
public function save(&$VO) {
$paramArray = $VO->getParamArray();//get array of attributes
$paramIdArray = $paramArray[0]; //first attribute is always id
/*create and execute getId() and store value into $void to check if it's save or update*/
eval('$voId = $VO->get'.ucfirst($paramIdArray[1]).'();');
...
目前我正在使用 eval 来执行这些方法,但众所周知 eval 非常慢。
我正在考虑将其更改为 call_user_func 方法
比如:
$voId = call_user_func(array($VO, 'get'.ucfirst($paramIdArray[1])));
但也有其他解决方案。我也许可以使用这样的东西
$method = 'get'.ucfirst($paramIdArray[1]));
$voId = $VO->$method();
否则
$method = 'get'.ucfirst($paramIdArray[1]));
$voId = $VO->{$method}();
最好的方法是什么?
【问题讨论】:
标签: php