php trait 多重继承的实现案例.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
php trait 多重继承的实现案例

php trait 多重继承的实现案例 自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。 Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集。Traits 和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题。 Trait 和一个类相似,但仅仅旨在用细粒度和一致的方式来组合功能。Trait 不能通过它自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用类的成员不需要继承。 在我理解说白了就是在继承类链中隔离了子类继承父类的某些特性(就是子类“要用父类的特性的时候”,如果trait有,就优先调用trait的方法、属性等)。 ?php trait MyTrait { ??? protected $var = MyTrait_var; ??? protected $var1 = MyTrait_var; ? ??? function __construct() ??? { ??????? echo $this-var.PHP_EOL; ??? } ? ??? function a() ??? { ??????? echo a.PHP_EOL; ??? } } ? interface MyInterface { ??? function __construct(); ??? function b(); } ? abstract class MyAbstract { ??? protected $var2 = MyAbstract_var; ? ??? use MyTrait; ? ??? function b() ??? { ??????? echo b.PHP_EOL; ??? } } ? class MyClass extends MyAbstract implements MyInterface { ??? protected $var3 = MyClass_var; ? ??? //也可以在这里引用,不区分继承关系 ??? //use MyTrait; ??? function c() ??? { ??????? echo c.PHP_EOL; ??? } } ? $class = new MyClass(); $class-a(); $class-b(); $class-c(); 输出结果 MyTrait_var a b c 优先级 从基类继承的成员被 trait 插入的成员所覆盖,来自当前类的成员覆盖 trait 的方法。 class Base { ??? public function sayHello() { ??????? echo Hello ; ??? } } trait SayWorld { ??? public function sayHello() { ??????? parent::sayHello(); ??????? echo World!; ??? } ??? public function sayHellos() { ??????? echo Hello World!; ??? } } class MyHelloWorld extends Base { ??? use SayWorld; ??? public function sayHellos() { ??????? echo Hello Universe!; ??? } } $o = new MyHelloWorld(); $o-sayHello();? #Hello World! $o-sayHellos();? #Hello Universe! 3、多个 trait 通过逗号分隔,在 use 声明列出多个 trait,可以都插入到一个类中。 trait Hello { ??? public function sayHello() { ??????? echo Hello ; ??? } } trait World { ??? public function sayWorld() { ??????? echo World; ??? } } class MyHelloWorld { ??? use Hello, World; } $o = new MyHelloWorld(); $o-sayHello(); # Hello $o-sayWorld(); # World 4、多Traits冲突的解决 如果两个 trait 都插入了一个同名的方法,如果没有明确解决冲突将会产生一个致命错误。 为了解决多个 trait 在同一个类中的命名冲突,需要使用

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档