One problem with PHP as a programming language is that you can only have single inheritance. This means that a class can only inherit from another class. For example, to prevent code duplication, it is best to inherit methods from two different classes. In PHP 5.4, a new language feature called Traits was added and widely used in the Laravel framework.
# Trait is a mechanism for reusing code in single inheritance languages such as PHP. Traits are designed to reduce some of the limitations of single inheritance by enabling developers to freely reuse sets of methods in multiple independent classes living in different class hierarchies. The semantics of Traits and class composition are defined in a way that reduces complexity and avoids typical problems associated with multiple inheritance and Mixins.
Traits are similar to classes, but are only used to group functionality in a fine-grained and consistent way. Traits cannot be instantiated themselves. It complements traditional inheritance and enables horizontal composition of behavior; that is, applications of class members do not require inheritance.
What is a PHP Trait?
A Trait is simply a set of methods that you wish to include in another class. Like abstract classes, traits cannot be instantiated themselves.
An example of a Trait can be:
trait SharePost { public function share($item) { return 'share this post'; } }
Then you can include this trait in other classes like this:
class Post { use SharePost; } class Comment { use SharePost; }
Now, if you want to get the trait from these classes Create new objects in , you will find that they all have share() methods available:
$post = new Post; echo $post->share(''); $comment = new Comment; echo $comment->share('');
trait How does it work?
As can be seen from the above example, although the method is not defined, both the Post object and the Comment object have the share() method available.
Trait is basically just a way to "copy and paste" code at runtime.
This means that the Trait is copied into the Post and Comment classes, so when you instantiate a new instance, the share() method code will be available.
I frequently review my code and how I structure my code so that future feature additions can be completed quickly and new projects can easily extend previous ideas.
How to use traits in laravel?
I created a Trait directory in my Http directory with a Trait called TraitBrandsTrait.php
use App\Http\Traits\BrandsTrait; class YourController extends Controller { use BrandsTrait; public function addProduct() { $brands = $this->brandsAll(); } }
This is my BrandsTrait.php
<?php namespace App\Http\Traits;use App\Brand; trait BrandsTrait { public function brandsAll() { // 从品牌表中获取所有品牌 $brands = Brand::all(); return $brands; } }
The above is the detailed content of What is Trait in PHP Laravel. For more information, please follow other related articles on the PHP Chinese website!