我正在尝试通过injection dependence
设置我的php(Zend Framework)项目。到目前为止,当我实例化模型时,我会将table
和view
(数据库视图)传递给我的模型:
$table = new My_Table();
$view = new My_View();
$model = new My_Model($table, $view);
我的所有模型都扩展了一个Same类,它负责表单的构造,消息处理和getter以与模型交互。
现在我必须向model
注入model
,我正在寻找一种被动的静态方法。在我的模型的父类中,我添加了一个静态方法inject
,它在应用程序引导程序中调用。我以key => value
的形式传递两个字符串,其中键是必须在模型中创建的变量的名称,值是表示要实例化的类的字符串。
My_Model::inject('dependentModel', 'My_Other_Model')
当我尝试通过以下代码将密钥用作新的成员变量时出现问题:
protected function _initDependency()
{
$this->_table = null;
foreach (self::$_staticDependency as $key => $dependency) {
$varName = '_' . $key;
$this->{$$varName} = new $dependency();
}
}
我收到以下消息
Notice: Undefined variable: _dependentModel
实现这一目标的最佳方法是什么,因为我知道我想创建我的模型对其依赖项的无知?
答案 0 :(得分:2)
使用数组
class Foo {
private $_data = array();
protected function _initDependency()
{
$this->_table = null;
foreach (self::$_staticDependency as $key => $dependency) {
$varName = '_' . $key;
$this->_data[$varName] = new $dependency();
}
}
}
(作为副作用,这也删除了变量变量)
您可以使用__get()
,__set()
,__isset()
和__unset()
来模拟属性行为。
答案 1 :(得分:0)
您是否尝试过像Doctrine2这样的正确ORM。你可以省时间重新发明轮子。使用ZF可以很容易地设置Doctrine2,如果你遇到困难,网上会有很多信息。