设为首页收藏本站
查看: 180|回复: 0

PHP使用Trait解决PHP单继承问题的实例详解

[复制链接]

论坛元老

Rank: 6Rank: 6

积分
34274
主题
17031
UID
1347
M币
67
贡献
17176

  • 发表于 2020-9-10 04:17:00 | 显示全部楼层 |阅读模式

    // 单继承:一个子类只能有一个父类 class A{ function show() { echo "A"; } } class B{ function show() { echo "B"; } } class C extends A{ } $c = new C; $c->show();使用Trait解决PHP的单继承
    自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait。
    Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 methodTrait 和 Class 组合的语义定义了一种减少复杂性的方式,避免传统多继承和 Mixin 类相关典型问题无法通过 trait 自身来实例化
    示例:
    add($var1,$var2) ."\n"; echo "Ressult of multiplication:".$this->multiplication($var1,$var2); } } $o = new File(); $o->calculate(5,3);多个trait
    通过逗号分隔,在 use 声明列出多个 trait,可以都插入到一个类中。
    sayHello(); $o->sayWorld(); $o->sayExclamationMark();冲突的解决
    如果两个 trait 都插入了一个同名的方法,如果没有明确解决冲突将会产生一个致命错误。
    为了解决多个 trait 在同一个类中的命名冲突,需要使用 insteadof 操作符来明确指定使用冲突方法中的哪一个。
    以上方式仅允许排除掉其它方法,as 操作符可以 为某个方法引入别名。 注意,as 操作符不会对方法进行重命名,也不会影响其方法。
    示例:
    从trait 来组成trait
    正如 class 能够使用 trait 一样,其它 trait 也能够使用 trait。在 trait 定义时通过使用一个或多个 trait,能够组合其它 trait 中的部分或全部成员。
    sayHello(); $o->sayWorld();Trait的抽象成员
    为了对使用的类施加强制要求,trait 支持抽象方法的使用。
    getWorld(); } abstract public function getWorld(); } class MyHelloWorld { private $world; use Hello; public function getWorld() { return $this->world; } public function setWorld($val) { $this->world = $val; } }Trait的静态成员
    Traits 可以被静态成员静态方法定义。
    inc(); // echo 1 $p = new C2(); $p->inc(); // echo 1x;推荐教程:《PHP视频教程》
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    在我站开通SVIP可同时获得17个站点VIP资源 立即登录 立即注册
    快速回复 返回顶部 返回列表