经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
如何在 PHP 和 Laravel 中使用 Traits
来源:cnblogs  作者:程序媛的明天  时间:2019/11/15 9:00:50  对本文有异议



事实上,PHP 作为一门编程语言存在的问题之一,就是你只能使用单继承。这意味着一个类只能从另一个类中继承。例如,可能希望从几个不同的类继承方法,以防止代码重复。在 PHP 5.4 中 一个新的语言特性被添加进来,这就是众所周知的 Traits,它在 Laravel 框架中被广泛使用。

PHP 官方网站给出了 Traits 的定义,如下:

“ Trait 是单继承语言(如 PHP )中的一种代码复用机制。 Trai 的目的是减少单继承语言的一些限制,能让开发者自由的重用在不同的类层次结构下几个独立类中的方法。 Trait 的语义组合与类的定义在某种程度上减少了代码的复杂度,避免了与多继承和 Mixins 相关的一些典型问题。
Trait 与类非常相似,但它的目的仅仅是用更好、一致的方式汇聚一些方法。 Trait 本身不能被实例化。除了传统继承之外,它能水平组合行为,换言之,类的应用程序不需要继承。”

PHP Traits是什么?

Trait 是一组简单的包含在另一个类中的方法。 Trait 就像一个抽象类一样,无法单独实例化。

一个 Trait 示例就像下面这样:

  1. 1 trait SharePost {
  2. 2
  3. 3 public function share($item)
  4. 4 {
  5. 5 return 'share this post';
  6. 6 }
  7. 7
  8. 8 }

 

然后,您可以在其他类中这样使用 Trait :

  1. 1 class Post {
  2. 2
  3. 3 use SharePost;
  4. 4
  5. 5 }
  6. 6
  7. 7 class Comment {
  8. 8
  9. 9 use SharePost;
  10. 10
  11. 11 }

 

现在,如果您要从这些类中创建新对象,您会发现它们都可以使用 share()方法:

  1. 1 $post = new Post;
  2. 2 echo $post->share(''); // 'share this post'
  3. 3
  4. 4 $comment = new Comment;
  5. 5 echo $comment->share(''); // 'share this post'

 

Traits 如何工作 ?

从上面例子可以看到, 尽管 PostComment 本身没有定义方法,但是他们可以调用 share() 方法。

Trait 是运行时 「复制和粘贴」 代码的一种方式.

这意味着 Trait 被复制到 Post and Comment ,因此当你实例化一个新实例, 可以直接调用 share() 方法。

我会定期检查我的代码以及如何构造新代码,目的是为了将来可以快速构建新功能,并且可以轻松的开启新项目。

那么,怎样在laravel中使用traits呢?

首先我在项目的Http 目录下创建一个Traits文件夹,并且新建了一个名叫 BrandsTrait.php 的Trait文件

使用它就像这样:

  1. 1 use App\Http\Traits\BrandsTrait;
  2. 2
  3. 3 class YourController extends Controller {
  4. 4 use BrandsTrait;
  5. 5
  6. 6 public function addProduct() {
  7. 7 $brands = $this->brandsAll();
  8. 8 }
  9. 9 }

 

这是我的 BrandsTrait.php

  1. 1 <?php
  2. 2 namespace App\Http\Traits;
  3. 3
  4. 4 use App\Brand;
  5. 5 trait BrandsTrait {
  6. 6 public function brandsAll() {
  7. 7 // 从品牌表中获取所有品牌.
  8. 8 $brands = Brand::all();
  9. 9
  10. 10 return $brands;
  11. 11 }
  12. 12 }

 

甚至, 如果您在模型中找到另一种与产品和品牌相互作用有关的通用方法,那么将代码写在该 trait 是个不错的选择。

原文链接:http://www.cnblogs.com/a609251438/p/11858108.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号