Trait是一種在單繼承語(yǔ)言(如PHP)中重用代碼的機(jī)制。Trait旨在通過(guò)使開(kāi)發(fā)人員能夠在生活在不同類層次結(jié)構(gòu)中的多個(gè)獨(dú)立類中自由地重用方法集來(lái)減少單繼承的某些限制。Traits和類組合的語(yǔ)義以降低復(fù)雜性的方式定義,并避免了與多重繼承和Mixins相關(guān)的典型問(wèn)題。
Trait類似于類,但僅用于以細(xì)粒度和一致的方式對(duì)功能進(jìn)行分組。無(wú)法自行實(shí)例化Trait。它是對(duì)傳統(tǒng)繼承的補(bǔ)充,可以實(shí)現(xiàn)行為的橫向組合; 也就是說(shuō),類成員的應(yīng)用程序不需要繼承。
什么是PHP Trait?
Trait僅僅是您希望包含在另一個(gè)類中的一組方法。與抽象類一樣,Trait不能自己實(shí)例化。
Trait的一個(gè)例子可以是:
trait SharePost {
public function share($item)
{
return 'share this post';
}
}
然后你可以把這個(gè)trait 包含在其他類中,就像這樣:
class Post {
use SharePost;
}
class Comment {
use SharePost;
}
現(xiàn)在,如果要從這些類中創(chuàng)建新對(duì)象,您會(huì)發(fā)現(xiàn)它們都有share()方法可用:
$post = new Post;
echo $post->share('');
$comment = new Comment;
echo $comment->share('');
trait 如何運(yùn)作?
從上面的示例中可以看出,盡管沒(méi)有定義該方法,但是對(duì)象Post和Comment對(duì)象都具有share()可用的方法。
Trait基本上只是一種在運(yùn)行時(shí)“復(fù)制和粘貼”代碼的方法。
這意味著Trait被復(fù)制到Post和Comment類中,因此當(dāng)您實(shí)例化一個(gè)新實(shí)例時(shí),share()方法代碼將可用。
我經(jīng)常檢查我的代碼以及如何構(gòu)建我的代碼,以便可以快速完成未來(lái)的功能添加,并且新項(xiàng)目可以輕松擴(kuò)展以前的想法。
如何在laravel中使用trait ?
我在我的Http目錄中創(chuàng)建了一個(gè)Trait目錄,其中有一個(gè)名為的TraitBrandsTrait.php
use App\Http\Traits\BrandsTrait;
class YourController extends Controller {
use BrandsTrait;
public function addProduct() {
$brands = $this->brandsAll();
}
}
這是我的BrandsTrait.php
?php
namespace App\Http\Traits;use App\Brand;
trait BrandsTrait {
public function brandsAll() {
// 從品牌表中獲取所有品牌
$brands = Brand::all(); return $brands;
}
}
您可能感興趣的文章:- 在 PHP 和 Laravel 中使用 Traits的方法
- Laravel中Trait的用法實(shí)例詳解
- laravel下trait的使用代碼實(shí)例詳解