《PHP實例:Laravel中Trait的用法實例詳解》要點:
本文介紹了PHP實例:Laravel中Trait的用法實例詳解,希望對您有用。如果有疑問,可以聯系我們。
本文實例講述了Laravel中Trait的用法.分享給大家供大家參考,具體如下:PHP實例
看看PHP官方手冊對Trait的定義:PHP實例
自 PHP 5.4.0 起,PHP 實現了代碼復用的一個辦法,稱為 traits.PHP實例
Traits 是一種為類似 PHP 的單繼承語言而準備的代碼復用機制.Trait 為了減少單繼承語言的限制,使開發人員能夠自由地在不同層次結構內獨立的類中復用辦法集.Traits 和類組合的語義是定義了一種方式來減少復雜性,避免傳統多繼承和混入類(Mixin)相關的典型問題.PHP實例
Trait 和一個類相似,但僅僅旨在用細粒度和一致的方式來組合功能.Trait 不能通過它自身來實例化.它為傳統繼承增加了水平特性的組合;也就是說,應用類的成員不需要繼承.PHP實例
官方手冊也舉了兩個例子:PHP實例
Trait用法示例PHP實例
<?php trait ezcReflectionReturnInfo { function getReturnType() { /*1*/ } function getReturnDescription() { /*2*/ } } class ezcReflectionMethod extends ReflectionMethod { use ezcReflectionReturnInfo; /* ... */ } class ezcReflectionFunction extends ReflectionFunction { use ezcReflectionReturnInfo; /* ... */ } ?>
Trait的優先級PHP實例
從基類繼承的成員被 trait 插入的成員所覆蓋.優先順序是來自當前類的成員覆蓋了 trait 的辦法,而 trait 則覆蓋了被繼承的辦法.PHP實例
從基類繼承的成員被插入的 SayWorld Trait 中的 MyHelloWorld 辦法所覆蓋.其行為 MyHelloWorld 類中定義的辦法一致.優先順序是當前類中的辦法會覆蓋 trait 辦法,而 trait 辦法又覆蓋了基類中的辦法.PHP實例
<?php class Base { public function sayHello() { echo 'Hello '; } } trait SayWorld { public function sayHello() { parent::sayHello(); echo 'World!'; } } class MyHelloWorld extends Base { use SayWorld; } $o = new MyHelloWorld(); $o->sayHello(); ?>
以上例程會輸出:PHP實例
Hello World!
以上內容來自PHP官網手冊.PHP實例
Trait在Laravel中的使用PHP實例
Laravel中大量使用Trait特性來提高代碼的復用性,本文只是從某個Laravel項目中舉個例子.PHP實例
比如在一個PageController.php控制器中有個show辦法:PHP實例
public function show($slug) { $page = PageRepository::find($slug); $this->checkPage($page, $slug); return View::make('pages.show', ['page' => $page]); }
這里PageRepository::find()辦法就是使用的一個Trait的辦法,在PageRepository.php中使用命名空間聲明及引入:PHP實例
namespace GrahamCampbell\BootstrapCMS\Repositories; use GrahamCampbell\Credentials\Repositories\AbstractRepository; use GrahamCampbell\Credentials\Repositories\PaginateRepositoryTrait; use GrahamCampbell\Credentials\Repositories\SlugRepositoryTrait; class PageRepository extends AbstractRepository { use PaginateRepositoryTrait, SlugRepositoryTrait; // 此處省略800子 }
其中SlugRepositoryTrait這個Trait定義了find辦法:PHP實例
trait SlugRepositoryTrait { /** * Find an existing model by slug. * * @param string $slug * @param string[] $columns * * @return \Illuminate\Database\Eloquent\Model */ public function find($slug, array $columns = ['*']) { $model = $this->model; return $model::where('slug', '=', $slug)->first($columns); } }
這樣就可以在控制中使用Trait了,很好的實現了代碼的復用.PHP實例
個人理解:PHP實例
在一個類中使用Trait,就相當于這個類也有了Trait中定義的屬性和辦法.Traits的使用場景是如果多個類都要用到同樣的屬性或者辦法,這個時候使用Traits可以方便的給類增加這些屬性或辦法,而不用每個類都去繼承一個類,如果說繼承類是豎向擴展一個類,那么Traits是橫向擴展一個類,從而實現代碼復用.PHP實例
關于PHP中Trait的使用還可參考前面一篇《PHP中的traits簡單使用實例》PHP實例
本文轉自:小談博客 http://www.tantengvip.com/2015/12/laravel-trait/PHP實例
更多關于Laravel相關內容感興趣的讀者可查看本站專題:《Laravel框架入門與進階教程》、《php優秀開發框架總結》、《smarty模板入門基礎教程》、《php日期與時間用法總結》、《php面向對象程序設計入門教程》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》PHP實例
希望本文所述對大家基于Laravel框架的PHP程序設計有所贊助.PHP實例
《PHP實例:Laravel中Trait的用法實例詳解》是否對您有啟發,歡迎查看更多與《PHP實例:Laravel中Trait的用法實例詳解》相關教程,學精學透。維易PHP學院為您提供精彩教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/7346.html