YII2.0框架行为(Behavior)深入详解(11)

首先来讲,拿行为与继承比较,从逻辑上是不对的,这两者是在完全不同的层面上的事物,是不对等的。之所以进行比较,是因为在实现的效果上,两者有的类似的地方。看起来,行为和继承都可以使一个类具有另一个类的属性和方法,从而达到扩充类的功能的目的。

相比较于使用继承的方式来扩充类功能,使用行为的方式,一是不必对现有类进行修改,二是PHP不支持多继承,但是Yii可以绑定多个行为,从而达到类似多继承的效果。

反过来,行为是绝对无法替代继承的。亚洲人,美洲人都是地球人,你可以将亚洲人和美洲人当成地球人来对待。但是,你绝对不能把一只在某些方面表现得像人的猴子,真的当成人来对待。

这里就不展开讲了。从本质上来讲,行为只是一种设计模式,是解决问题的方法学。继承则是PHP作为编程语言所提供的特性,根本不在一个层次上。

行为与特性

特性是PHP5.4之后引入的一个新feature。从实现效果看,行为与特性都达到把自身的public 变量、属性、方法注入到当前类中去的目的。在使用上,他们也各有所长,但总的原则可以按下面的提示进行把握。

倾向于使用行为的情况:

  • 行为从本质上讲,也是PHP的类,因此一个行为可以继承自另一个行为,从而实现代码的复用。而特性只是PHP的一种语法,效果上类似于把特性的代码导入到了类中从而实现代码的注入,特性是不支持继承的。
  • 行为可以动态地绑定、解除,而不必要对类进行修改。但是特性必须在类在使用 use 语句,要解除特性时,则要删除这个语句。换句话说,需要对类进行修改。
  • 行为还以在在配置阶段进行绑定,特性就不行了。
  • 行为可以用于对事件进行反馈,而特性不行。
  • 当出现命名冲突时,行为会自行排除冲突,自动使用先绑定的行为。而特性在发生冲突时,需要人为干预,修改发生冲突的变量名、属性名、方法名。

倾向于使用特性的情况:

  • 特性比行为在效率上要高一点,因为行为其实是类的实例,需要时间和空间进行分配。
  • 特性是PHP的语法,因此,IDE的支持要好一些。目前还没有IDE能支持行为。

更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/5482.html