博客列表 >Trait 命名冲突的解决方案及改成员的访问控制

Trait 命名冲突的解决方案及改成员的访问控制

PHP新手学习记录
PHP新手学习记录原创
2020年05月07日 11:18:46759浏览

命名冲突解决方法

如果两个 trait 都插入一个同名的方法,没有明确解决会产生一个致使错误。解决方案有如下两种:

  1. 1.使用 insteadof 操作符来明确使用哪一个 trait 中的方法(此方法会排除其他方法);
  2. 2.使用 as 操作符为某个方法起个别名。

代码示例:

  1. trait A {
  2. public static function say() {
  3. echo '我是 trait A say() 方法<br>';
  4. }
  5. }
  6. trait B {
  7. public static function say() {
  8. echo '我是 trait B say() 方法<br>';
  9. }
  10. }
  11. class Talk {
  12. use A, B {
  13. // 指明使用 trait A 方法
  14. A::say insteadof B;
  15. // trait b 中的 say 方法取别名 s
  16. B::say as s;
  17. }
  18. }
  19. Talk::say();
  20. Talk::s();

输出结果:

  1. 我是 trait A say() 方法
  2. 我是 trait B say() 方法

改变 trait 成员的访问控制

使用 as 语法可以调整方法的访问控制

  1. trait ComputerTrait
  2. {
  3. private static function shutDown() {
  4. echo '已关机';
  5. }
  6. }
  7. class Computer
  8. {
  9. use ComputerTrait {
  10. // 将 shutDown 方法访问控制设置为 public
  11. shutDown as public;
  12. }
  13. }
  14. Computer::shutDown();

输出结果:

  1. 已关机
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议