文章转发自专业的Laravel开发者社区,原始连接:learnku.com/laravel/t/3…php
事实上,PHP 做为一门编程语言存在的问题之一,就是你只能使用单继承。这意味着一个类只能从另外一个类中继承。例如,可能但愿从几个不一样的类继承方法,以防止代码重复。在 PHP 5.4 中 一个新的语言特性被添加进来,这就是众所周知的 Traits,它在 Laravel 框架中被普遍使用。laravel
PHP 官方网站给出了 Traits 的定义,以下:编程
“ Trait 是单继承语言(如 PHP )中的一种代码复用机制。 Trai 的目的是减小单继承语言的一些限制,能让开发者自由的重用在不一样的类层次结构下几个独立类中的方法。 Trait 的语义组合与类的定义在某种程度上减小了代码的复杂度,避免了与多继承和 Mixins 相关的一些典型问题。bash
Trait 与类很是类似,但它的目的仅仅是用更好、一致的方式汇聚一些方法。 Trait 自己不能被实例化。除了传统继承以外,它能水平组合行为,换言之,类的应用程序不须要继承。”框架
Trait 是一组简单的包含在另外一个类中的方法。 Trait 就像一个抽象类同样,没法单独实例化。编程语言
一个 Trait 示例就像下面这样:post
trait SharePost {
public function share($item)
{
return 'share this post';
}
}
复制代码
而后,您能够在其余类中这样使用 Trait :网站
class Post {
use SharePost;
}
class Comment {
use SharePost;
}
复制代码
如今,若是您要从这些类中建立新对象,您会发现它们均可以使用 share()
方法:ui
$post = new Post;
echo $post->share(''); // 'share this post'
$comment = new Comment;
echo $comment->share(''); // 'share this post'
复制代码
从上面例子能够看到, 尽管 Post
和 Comment
自己没有定义方法,可是他们能够调用 share()
方法。this
Trait 是运行时 「复制和粘贴」 代码的一种方式.
这意味着 Trait 被复制到 Post
and Comment
,所以当你实例化一个新实例, 能够直接调用 share()
方法。
我会按期检查个人代码以及如何构造新代码,目的是为了未来能够快速构建新功能,而且能够轻松的开启新项目。
那么,怎样在laravel中使用traits呢?
首先我在项目的Http
目录下建立一个Traits文件夹,而且新建了一个名叫 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;
}
}
复制代码
甚至, 若是您在模型中找到另外一种与产品和品牌相互做用有关的通用方法,那么将代码写在该 trait 是个不错的选择。