所以伙计们,我有这个基本结构:
interface IModule {
public function _prepareActionObj ();
}
abstract class Module implements IModule {
private $_action = null,
$_actionObj = null,
$_actionHandlers = array();
public function __construct() {
$this->_action = GetParamDefault('action', '');
$this->_prepareActionObj();
}
private function _prepareActionObj () {
$this->_actionObj = new $this->_actionHandlers[$this->_action]();
}
}
到目前为止没有什么奇怪的。但是当我这样做时:
class AdminHomeModule extends Module {
private
$_actionHandlers = array(
'' => 'AdminModuleHomeAction'
);
}
并创建 AdminHomeModule 的新实例我收到此错误
Undefined index: on line 22 in ....\interfaces\IModule.php
这正是
$this->_actionObj = new $this->_actionHandlers[$this->_action]();
当我在模块构造函数中转储 $this 时,我得到了这个
AdminHomeModule Object
(
[_actionHandlers:AdminHomeModule:private] => Array
(
[] => AdminModuleHomeAction
)
[_action:Module:private] =>
[_actionObj:Module:private] =>
[_actionHandlers:Module:private] => Array
(
)
)
正如你们所看到的,我得到了两个 _actionHandlers 实例,一个用于父类,一个来自当前扩展 Module 的类。我不明白为什么我有两个 _actionHandlers?在子类中声明它时我不应该覆盖它,因为现在 _prepareActionObject 正在寻找错误的位置,我得到了这个讨厌的错误......