みんな私はこの基本的な構造を持っています:
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 の 2 つのインスタンスを取得します。1 つは親クラス用で、もう 1 つは Module を拡張する現在のクラスからのものです。_actionHandlers が 2 つある理由がわかりません。子クラスで宣言するときに上書きすべきではありません。現在 _prepareActionObject が間違った場所を探しており、この厄介なエラーが発生するためです...