什么是PHP的性状Traits

PHP使用一种典型的继承模型,在这种模型中,我们先编写一个通用的根类,实现基本功能,然后扩展这个根类,创建更具体的类,从直接父类继承实现。这叫继承层次结构,很多编程语言都使用了这个模式。大多时候,这种典型的继承模型能良好的运行,可是,如果想让两个无关的PHP类具有类似的行为,这种情况我们应该如何处理呢?

为了解决了上述的问题,自PHP5.4.0起,PHP实现了代码复用的一个方法,称为 traits。 它不打乱原有类的关系,同时也给不同的类增加了相同的行为。
Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集。Traits 和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题。
Trait 和一个类相似,但仅仅旨在用细粒度和一致的方式来组合功能。Trait 不能通过它自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用类的成员不需要继承。

之前在公司老框架(zend framework1,zend framework2)下开发的时候,由于历史原因需要重写Yii2的hasOne和hasMany方法,就用到了trait 。

  1. 那么如何创建性状Traits
trait ProductTrait {
   //实现代码
   public function test(){
      echo 'this is Traits test';
   }
}
  1. 如何使用性状
class Favorite extends \comm\models\CommModel{
    use ProductTrait;
}
  1. 如何调用
favorite = new Favorite();
favorite.test();

相关文章

此处评论已关闭