美文网首页
Laravel中的Trait特性

Laravel中的Trait特性

作者: 积_渐 | 来源:发表于2019-02-26 16:59 被阅读3次

相对于多继承语言(如C++),代码复用这个问题对于单继承类语言(如Ruby、PHP等)来说需要通过其他方法来解决,例如Ruby中通过混入类(Mixin)的方法来解决。PHP自5.4.0起,使用了一种简洁的方案来实现代码复用,即trait。一个trait和一个类相似,但trait不能像类一样进行实例化,而是通过关键字use添加到其他类的内部,从而发挥它的作用。相对于传统继承方法,trait增加了水平特性的组合。下面介绍一个具体实例。

image

为了在一个实例中介绍更多关于trait的性质,上面的实例相对来说有些复杂。根据上面的实例,下面列出一些trait的重要性质。

(1)优先级:当前类的方法会覆盖trait中的方法,而trait中的方法会覆盖基类的方法。

(2)多个trait组合:通过逗号分隔,通过use关键字列出多个trait。

(3)冲突的解决:如果两个trait都插入了一个同名的方法,若没有明确解决冲突将会产生一个致命错误。为了解决多个trait在同一个类中的命名冲突,需要使用insteadof操作符来明确指定使用冲突方法中的哪一个。同时,可以通过as操作符将其中一个冲突的方法以另一个名称来引入。

(4)修改方法的访问控制:使用as语法可以用来调整方法的访问控制。

(5)trait的抽象方法:在trait中可以使用抽象成员,使得类中必须实现这个抽象方法。

(6)trait的静态成员:在trait中可以用静态方法和静态变量。

(7)trait的属性定义:在trait中同样可以定义属性。

在Laravel框架中很多地方也应用到了trait,下面是身份认证中的部分代码

image

在文件“AuthenticatesUsers.php”和“RegistersUsers.php”中通过trait形式分别定义了登录认证和注册的相关函数,在文件“AuthenticatesAndRegistersUsers.php”中通过trait组合方式得到登录认证和注册的组合,最后在身份控制文件“AuthController.php”中使用了这个trait,如果系统有多个登录注册模块,可以重复使用这些trait,进而达到代码复用的目的。
https://baijiahao.baidu.com/s?id=1574354687678929&wfr=spider&for=pc

相关文章

  • Laravel中的Trait特性

    相对于多继承语言(如C++),代码复用这个问题对于单继承类语言(如Ruby、PHP等)来说需要通过其他方法来解决,...

  • Rust impl trait

    trait特性 trait特性可以理解为Java中的接口,具备和接口很类似的特性。trait中的函数叫做方法。某个...

  • laravel Trait

    Trait简介 Trait是PHP 5.4引入的新概念,看上去既像类又像接口,其实都不是,Trait可以看做类的部...

  • Trait特性

    PHP5.4以后实现了一个新的代码复用的方法Trait,Trait为了减少单继承语言的限制,相对于传统继承增加了水...

  • 那些永远记不住的单词| Trait 特性品质【127】

    Trait 英 [treɪt; treɪ] 美 [tret] n. 特性,特点;品质;少许 n. (Trait)...

  • php trait 特性

    trait 特性总结 : 使用关键字 : use / as / insteadof 属性: 不允许在继承的 tra...

  • 同义词整理

    人的特性,品质 character trait idiosyncrasy ['ɪdɪə(ʊ)'sɪŋkrəsɪ] ...

  • rust-trait

    什么是trait,trait相对于java就是interface。 基本的trait例子 在trait中,由sel...

  • Adaptive Layout

    设备适配手段 Trait(设备特性)iOS 8+ UITraitEnvironment protocol(UISc...

  • 3分钟短文:Laravel表单验证的“指挥中心”:FormReq

    引言 上一章我们学习到,Laravel控制器内引入 ValidatesRequests trait,从而使得继承了...

网友评论

      本文标题:Laravel中的Trait特性

      本文链接:https://www.haomeiwen.com/subject/ewxzyqtx.html