在 PHP 和 Laravel 中使用 Traits的方法
事實(shí)上,PHP 作為一門編程語言存在的問題之一,就是你只能使用單繼承。這意味著一個(gè)類只能從另一個(gè)類中繼承。例如,可能希望從幾個(gè)不同的類繼承方法,以防止代碼重復(fù)。在 PHP 5.4 中 一個(gè)新的語言特性被添加進(jìn)來,這就是眾所周知的 Traits,它在 Laravel 框架中被廣泛使用。
PHP 官方網(wǎng)站給出了 Traits 的定義,如下:
“ Trait 是單繼承語言(如 PHP )中的一種代碼復(fù)用機(jī)制。 Trai 的目的是減少單繼承語言的一些限制,能讓開發(fā)者自由的重用在不同的類層次結(jié)構(gòu)下幾個(gè)獨(dú)立類中的方法。 Trait 的語義組合與類的定義在某種程度上減少了代碼的復(fù)雜度,避免了與多繼承和 Mixins 相關(guān)的一些典型問題。
Trait 與類非常相似,但它的目的僅僅是用更好、一致的方式匯聚一些方法。 Trait 本身不能被實(shí)例化。除了傳統(tǒng)繼承之外,它能水平組合行為,換言之,類的應(yīng)用程序不需要繼承。”
PHP Traits是什么?
Trait 是一組簡(jiǎn)單的包含在另一個(gè)類中的方法。 Trait 就像一個(gè)抽象類一樣,無法單獨(dú)實(shí)例化。
一個(gè) Trait 示例就像下面這樣:
trait SharePost { public function share($item) { return 'share this post'; } }
然后,您可以在其他類中這樣使用 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(''); // 'share this post' $comment = new Comment; echo $comment->share(''); // 'share this post'
Traits 如何工作 ?
從上面例子可以看到, 盡管 Post 和 Comment 本身沒有定義方法,但是他們可以調(diào)用 share() 方法。
Trait 是運(yùn)行時(shí) 「復(fù)制和粘貼」 代碼的一種方式.
這意味著 Trait 被復(fù)制到 Post and Comment ,因此當(dāng)你實(shí)例化一個(gè)新實(shí)例, 可以直接調(diào)用 share() 方法。
我會(huì)定期檢查我的代碼以及如何構(gòu)造新代碼,目的是為了將來可以快速構(gòu)建新功能,并且可以輕松的開啟新項(xiàng)目。
那么,怎樣在laravel中使用traits呢?
首先我在項(xiàng)目的 Http 目錄下創(chuàng)建一個(gè)Traits文件夾,并且新建了一個(gè)名叫 BrandsTrait.php 的Trait文件
使用它就像這樣:
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; } }
甚至, 如果您在模型中找到另一種與產(chǎn)品和品牌相互作用有關(guān)的通用方法,那么將代碼寫在該 trait 是個(gè)不錯(cuò)的選擇。
總結(jié)
以上所述是小編給大家介紹的在 PHP 和 Laravel 中使用 Traits的方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
laravel接管Dingo-api和默認(rèn)的錯(cuò)誤處理方式
今天小編就為大家分享一篇laravel接管Dingo-api和默認(rèn)的錯(cuò)誤處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10php 多文件上傳的實(shí)現(xiàn)實(shí)例
在php中,實(shí)現(xiàn)文件上傳時(shí)一個(gè)很簡(jiǎn)單的事情,但是如果我們要一次上傳多個(gè)文件,那又該如何編寫代碼呢?,需要的朋友可以參考下2016-10-10destoon實(shí)現(xiàn)首頁顯示供應(yīng)、企業(yè)、資訊條數(shù)的方法
這篇文章主要介紹了destoon實(shí)現(xiàn)首頁顯示供應(yīng)、企業(yè)、資訊條數(shù)的方法,在模板開發(fā)中非常實(shí)用,需要的朋友可以參考下2014-07-07PHP網(wǎng)站自動(dòng)化配置的實(shí)現(xiàn)方法(必看)
下面小編就為大家?guī)硪黄狿HP網(wǎng)站自動(dòng)化配置的實(shí)現(xiàn)方法(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05一個(gè)簡(jiǎn)單安全的PHP驗(yàn)證碼類、PHP驗(yàn)證碼
這篇文章主要介紹了一個(gè)簡(jiǎn)單安全的PHP驗(yàn)證碼類 PHP驗(yàn)證碼的相關(guān)資料,需要的朋友可以參考下2016-09-09php 問卷調(diào)查結(jié)果統(tǒng)計(jì)
一個(gè)新產(chǎn)品投入市場(chǎng),要先做問卷調(diào)查,考察這個(gè)產(chǎn)品在市場(chǎng)的需求量,本篇文章主要跟大家介紹使用php問卷調(diào)查結(jié)果統(tǒng)計(jì),感興趣的朋友一起學(xué)習(xí)吧2015-10-10Yii框架批量插入數(shù)據(jù)擴(kuò)展類的簡(jiǎn)單實(shí)現(xiàn)方法
這篇文章主要介紹了Yii框架批量插入數(shù)據(jù)擴(kuò)展類的簡(jiǎn)單實(shí)現(xiàn)方法,涉及Yii擴(kuò)展類及數(shù)據(jù)庫(kù)相關(guān)操作技巧,需要的朋友可以參考下2017-05-05