# Comparing Yii Behaviours and Native PHP Traits

Last updated:

PHP Traits and Yii Behaviours are implementations of the mixin object composition pattern, which allows you to share behaviour among classes; it is, therefore, an alternative to inheritance trees.

According to GOF's Design Patterns, we should favour composition over inheritance whenever possible.

Favor 'object composition' over 'class inheritance'. - (Gang of Four 1995:20)

TODO these are two ways to implement this when using Yii...

TODO an example of each

### Runtime

You can add Yii Behaviours at runtime (this is beautiful and allows massive uncoupling) but you can only add Traits to a class at code writing time.

### IDE behaviour

IDEs will probably pick-up code from Traits if they see the use keyword at the beginning of you class code; this means that things like inteli-sense and code-completion, as well as code suggestions will probably not work for Yii Behaviours.

### Parameters

You can parameterize Yii Behaviours and you can't do so with native PHP Traits. This allows for a little bit of extra flexibility in Yii Behaviours as compared to Traits.