您好,登錄后才能下訂單哦!
Trait怎么在Laravel中使用?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
Trait用法示例
<?php trait ezcReflectionReturnInfo { function getReturnType() { /*1*/ } function getReturnDescription() { /*2*/ } } class ezcReflectionMethod extends ReflectionMethod { use ezcReflectionReturnInfo; /* ... */ } class ezcReflectionFunction extends ReflectionFunction { use ezcReflectionReturnInfo; /* ... */ } ?>
Trait的優先級
從基類繼承的成員被 trait 插入的成員所覆蓋。優先順序是來自當前類的成員覆蓋了 trait 的方法,而 trait 則覆蓋了被繼承的方法。
從基類繼承的成員被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆蓋。其行為 MyHelloWorld 類中定義的方法一致。優先順序是當前類中的方法會覆蓋 trait 方法,而 trait 方法又覆蓋了基類中的方法。
<?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(); ?>
以上例程會輸出:
Hello World!
以上內容來自PHP官網手冊。
Trait在Laravel中的使用
Laravel中大量使用Trait特性來提高代碼的復用性,本文只是從某個Laravel項目中舉個例子。
比如在一個PageController.php控制器中有個show方法:
public function show($slug) { $page = PageRepository::find($slug); $this->checkPage($page, $slug); return View::make('pages.show', ['page' => $page]); }
這里PageRepository::find()方法就是使用的一個Trait的方法,在PageRepository.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方法:
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怎么在Laravel中使用問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。