首页 > 代码库 > ecmall源码中的 function _config_view()-关于重写

ecmall源码中的 function _config_view()-关于重写

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重新调用。这就是重写引出的问题。