PHP Traits的定义是什么,Trait怎样工作和使用
Admin 2022-06-01 群英技术资讯 1262 次浏览
这篇文章给大家分享的是“PHP Traits的定义是什么,Trait怎样工作和使用”,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下吧。
事实上,PHP 作为一门编程语言存在的问题之一,就是你只能使用单继承。这意味着一个类只能从另一个类中继承。例如,可能希望从几个不同的类继承方法,以防止代码重复。在 PHP 5.4 中 一个新的语言特性被添加进来,这就是众所周知的 Traits,它在 Laravel 框架中被广泛使用。
PHP 官方网站给出了 Traits 的定义,如下:
“ Trait 是单继承语言(如 PHP )中的一种代码复用机制。 Trai 的目的是减少单继承语言的一些限制,能让开发者自由的重用在不同的类层次结构下几个独立类中的方法。 Trait 的语义组合与类的定义在某种程度上减少了代码的复杂度,避免了与多继承和 Mixins 相关的一些典型问题。
Trait 与类非常相似,但它的目的仅仅是用更好、一致的方式汇聚一些方法。 Trait 本身不能被实例化。除了传统继承之外,它能水平组合行为,换言之,类的应用程序不需要继承。”
PHP Traits是什么?
Trait 是一组简单的包含在另一个类中的方法。 Trait 就像一个抽象类一样,无法单独实例化。
一个 Trait 示例就像下面这样:
trait SharePost {
public function share($item)
{
return 'share this post';
}
}
然后,您可以在其他类中这样使用 Trait :
class Post {
use SharePost;
}
class Comment {
use SharePost;
}
现在,如果您要从这些类中创建新对象,您会发现它们都可以使用 share() 方法:
$post = new Post;
echo $post->share(''); // 'share this post'
$comment = new Comment;
echo $comment->share(''); // 'share this post'
Traits 如何工作 ?
从上面例子可以看到, 尽管 Post 和 Comment 本身没有定义方法,但是他们可以调用 share() 方法。
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 是个不错的选择。
总结
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
PHP向它运行的任何脚本提供了大量的预定义常量。不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了...
自PHP5.3.0起,PHP增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类。准确说,后期静态绑定工作原理是存储了在上一个“非转发调用”(non-forwar...
在本篇文章里小编给大家整理的是一篇关于php png失真的原因及解决办法,有需要的朋友们可以跟着学习参考下。
PHP自动加载的实现有几种方式,怎样做?下文的讲解详细,步骤过程清晰,对大家进一步学习和理解相关知识有一定的帮助。有这方面学习需要的朋友就继续往下看吧!
用两个栈,出栈时全部出到第二个栈中,然后从第二个栈中出栈就能模拟队列队列操作类主要使用array_push()入队array_shift()出队(栈的实现类似,使用array_push()入栈,array_pop出栈)<?php/**PHP实现队列操作类*/classqueueOp{/**队尾入队*Retu
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008