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

 

 

你可能感兴趣的:(function)