Symfony 中对类的扩展机制
Sunday, March 1st, 2009PHP对类的处理有一些局限,不能动态的往类里面添加方法,也不能动态的修改一个类的访问权限,所以 Symfony 使用某种方式扩充了 PHP 的这一局限,在 Symfony1.0 中使用的机制被称为 Mixins,在Symfony1.2 中使用的机制被称为 Event。
假设我们需要向Action中注册一个新的方法(仅限1.1和1.2版本的Symofny),Symfony在/symfony/lib/action/sfComponents.class.php中用__call方法提供了一个注册新方法的接口,修改项目文件中的/project/apps/appName/config/appNameConfiguration.class.php中的内容为:
class appNameConfiguration extends sfApplicationConfiguration
{
public function configure()
{
// 进行注册
$this->dispatcher->connect('component.method_not_found', array($this, 'newFunction'));
}
// 需要注册的方法
public static function newFunction(sfEvent $event)
{
echo 'Hello World';
exit;
}
}
这样我们就可以在任何Action中使用$this->newFunction()的方式调用。
Symfony的几个核心类都提供了这个机制(Click Me),合理的使用可以让代码的结构清晰,当然,代码追踪会失效,在模块化的程序中滥用也会大大的降低程序的可维护行。Symfony的Mixins或者Event机制不仅仅可以给类添加方法,还能能方法添加执行代码,这个用的不是很普遍,就不赘述了。