【php类与对象】trait

不言
Lepaskan: 2023-03-24 08:36:01
asal
1712 orang telah melayarinya


这篇文章介绍的内容是关于【php类与对象】trait ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

Trait (PHP 5.4.0 )

翻译Trait

  • Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。

  • Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。

  • Trait 和 Class 相似,但仅仅旨在用细粒度和一致的方式来组合功能。

  • Trait 为传统继承增加了水平特性的组合;也就是说,应用的几个 Class 之间不需要继承。


优先级

从基类继承的成员会被 trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法。
(当方法或属性同名时,当前类中的方法会覆盖 trait的 方法,而 trait 的方法又覆盖了基类中的方法。)

#Example #2 优先顺序示例sayHello(); //output: Hello World!?>
Salin selepas log masuk
Example #3 另一个优先级顺序的例子sayHello(); //output: Hello Universe!?>
Salin selepas log masuk

多个 trait

通过逗号分隔,在 use 声明列出多个 trait,可以都插入到一个类中。

Example #4 多个 trait 的用法sayHello();$o->sayWorld();$o->sayExclamationMark();//output: Hello World!?>
Salin selepas log masuk

命名冲突

如果两个 trait 都插入了一个同名的方法,而没有明确解决冲突将会产生一个致命错误。

为了解决多个 trait 在同一个类中的命名冲突,需要使用 insteadof 操作符来明确指定使用冲突方法中的哪一个。

以上方式仅允许排除掉其它方法,as 操作符可以 为某个方法引入别名。 注意,as 操作符不会对方法进行重命名,也不会影响其方法。

 a();//b1$C -> b();//b2$C -> a1();//a1$C -> a2();//a2?>
Salin selepas log masuk

as还可修改方法的访问控制

Example #6 修改方法的访问控制traitHello(); # 报致命错误,因为traitHello方法被修改成受保护的 $Obj2 = new Class2(); $Obj2->traitHello(); # 原来的traitHello方法仍然是公共的 // $Obj2->hi(); # 报致命错误,因为别名hi方法被修改成私有的
Salin selepas log masuk

Trait 也能组合Trait

Trait中支持抽象方法、静态属性及静态方法

sayHello();//Hello$Obj->sayWorld();//Worldecho $Obj->getWorld() . "\n";////get WorldHelloWorld::doSomething();//Doing something$Obj->inc();//1$Obj->inc();//2
Salin selepas log masuk

Trait 定义了一个属性后,类就不能定义同样名称的属性,否则会产生 fatal error。 有种情况例外:属性是兼容的(同样的访问可见度、初始默认值)。 在 PHP 7.0 之前,属性是兼容的,则会有 E_STRICT 的提醒。

Example #12 解决冲突
Salin selepas log masuk

相关推荐:

【php类与对象】Final 关键字

【php类与对象】后期静态绑定

【php类与对象】类型约束

Atas ialah kandungan terperinci 【php类与对象】trait . Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!