ecmall中类库的继承过程:
defaultAPP->MallbaseApp->FrontendApp->EcBaseApp->BaseApp->Object
在baseAPP中有三个方法,如下:
function assign($k, $v = null) { $this->_init_view(); if (is_array($k)) { $args = func_get_args(); foreach ($args as $arg) //遍历参数 { foreach ($arg as $key => $value) //遍历数据并传给视图 { $this->_view->assign($key, $value); } } } else { $this->_view->assign($k, $v); } } function _init_view() { if ($this->_view === null) { $this->_view =& v(); $this->_config_view();//配置 } } function _config_view() { echo ‘1234567890‘; }
在defaultApp,MallbaseApp,FrontendApp EcbaseAPP 中,均重写了
_config_view方法。
这样新建一个
defaultApp的新类,他就继承了BaseApp的很多方法。调用defaultApp继承自BaseApp的assign方法,assign方法会调用BaseApp的_init_view方法,BaseApp的_init_view方法又调用_config_view方法。
问题就出现在这里,事实上BaseApp的_init_view方法不会调用自身的_config_view方法,所以,无论自身的_config_view代码写
多少东西,都是不会执行的。真正执行的是defaultApp重写之后的_config_view方法。
如果想要执行父类的_config_view方法,需要使用 parent::_config_view重新调用。这就是重写引出的问题。
ecmall源码中的 function _config_view()-关于重写,布布扣,bubuko.com
ecmall源码中的 function _config_view()-关于重写
原文:http://www.cnblogs.com/z497688734/p/3766344.html