class Test
{
    public $vbar='test';
    protected function beforeBar(){}
    public function bar(){
        $this->beforeBar();
        echo "bar function\n";
    }
}
class MTest extends Test
{
    public function beforeBar(){
        echo "beforeBar function\n";
    }
}
$mtest = new MTest();
$mtest->bar();请问这样的编程实践是否有一个很NB的专业名称啊?

解决方案 »

  1.   

    joomla里叫Plugin,插件机制。
    插件类不应该继承Test主类,而应是一个单独的类,可以部署在代码的所有地方,看joomla源码,实现过程很简单,也很清晰。drupal的hook机制其实也类似,代码里放钩子,具体类实现钩子。
      

  2.   

    确实我也是这么理解的。但我认为把它理解为插件是不严谨的,插件应该是通过注册来实现的。话有说回来了如果这是钩子函数,那么理论上和window的钩子函数实现一样的吗?
      

  3.   

    嗯,joomla的插件确实必须要在具体流程里注册.drupal是钩子挂得到处都是,基本cms的各个处理流程都考虑到了。
    其实原理我觉得都一样的,windows钩子也是微软在具体进程里安放钩子,然后公布给开发人员,这样就可以很方便的嵌入和监听,又不用更改主体的源代码了,对于微软问题是想改也改不了,呵呵。
      

  4.   

    这个插件机制用观察者模式实现最合适了,joomla就是这么做的。