Single inheritance has often been the limitation for PHP. This means that a class can only inherit from one other class. Often classes share the same methods and it would be beneficial to allow reuse and prevent duplication.
In PHP 5.4 a new feature was added, known as Traits. A Trait is like a Mixin, allowing to use / mix classes into existing classes. This means code reduction and less duplication.
Example of a Trait
1 2 3 4 5 6 7 8 |
trait Sharable { public function share($item) { return 'share this item'; } } |
This trait can than be used in other classes:
1 2 3 4 5 6 7 8 9 10 11 |
class Post { use Sharable; } class Comment { use Sharable; } |
Both classes can now use the Shareable trait.
1 2 3 4 5 |
$post = new Post; echo $post->share(''); // 'share this item' $comment = new Comment; echo $comment->share(''); // 'share this item' |
The benefit is less code duplication. The drawback is, that not all used methods are visible within the source-code of the class. So before moving a method to a trait, make sure that you will actually reuse it ;)
I have been restructuring huge amounts of code over the past months and traits are helping to keep things far more organized.
In combination with __autoload its a real nice way to cleanup your code toolbox.
Happy coding
Alex