PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

php traits的作用有哪些?

coldplay.xixi
coldplay.xixi 原创
2020-07-01 14:25:04 3631浏览

php traits的作用是针对php这样的单继承语言设计的,旨在让开发者很方便的在不同继承体系的多个类之间公用一系列方法,以减少单继承带来的局限性。

Traits是针对php这样的单继承语言设计的。旨在让开发者很方便的在不同继承体系的多个类之间公用一系列方法,以减少单继承带来的局限性。Traits和class的结合,避免了多继承带来的一些列问题。

使用

首先看下官方文档给出的例子:

<?php
trait ezcReflectionReturnInfo {
    function getReturnType() { /*1*/ }
    function getReturnDescription() { /*2*/ }
}
class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}
class ezcReflectionFunction extends ReflectionFunction {
    use ezcReflectionReturnInfo;
    /* ... */
}
?>

从上面的例子可以看出,特性集ezcReflectionReturnInfo包含了两个方法:getReturnTypegetReturnDescription,而下面的两个子类分别继承自不同的父类,却可以通过use ezcReflectionReturnInfo来复用这两个方法。简单方便。

相关学习推荐:PHP编程从入门到精通

注意事项

  • 如果子类、父类、use的traits中存在重名方法,那么这三个方法的优先级为:子类 > tratis > 父类;

  • 可以同时use多个traits,但不可use重名的traits;

  • 如果use的多个traits中存在方法名冲突,可以使用指定某个方法来自于某个tratis。例如:

<?php
trait A {
    public function smallTalk() {
        echo &#39;a&#39;;
    }
    public function bigTalk() {
        echo &#39;A&#39;;
    }
}
trait B {
    public function smallTalk() {
        echo &#39;b&#39;;
    }
    public function bigTalk() {
        echo &#39;B&#39;;
    }
}
class Talker {
    use A, B {
        B::smallTalk insteadof A;
        A::bigTalk insteadof B;
    }
}
  • 方法可以使用as来设置别称,但只在该类有效。

class Aliased_Talker {
    use A, B {
        B::smallTalk insteadof A;
        A::bigTalk insteadof B;
        B::bigTalk as talk;
    }
}
  • 使用as的时候,还可以改变方法的可见性。

class MyClass2 {
    use HelloWorld { sayHello as private myPrivateHello; }
}
  • traits可以嵌套,例如A可以use B。

<?php
trait Hello {
    public function sayHello() {
        echo &#39;Hello &#39;;
    }
}
trait World {
    public function sayWorld() {
        echo &#39;World!&#39;;
    }
}
trait HelloWorld {
    use Hello, World;
}
  • traits中可以定义abstract方法,同样的,use该traits的class,也需要实现这些abstract的方法;

  • traits中可以定义常规变量、静态的变量和方法;

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。