温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

php中的traits有什么用

发布时间:2020-07-01 16:30:49 来源:亿速云 阅读:160 作者:元一 栏目:编程语言

php中的traits有什么用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

简介

Traits是面向对象编程中使用的一种概念,它表示一组可用于扩展类功能的方法。Traits提供了一组实现行为的方法,并要求来实现一组参数化所提供行为的方法。对于对象间的通信(以及对象之间的共享),特性在面向对象的协议(接口)和mixin之间有所不同。界面可以通过方法签名来定义一个或多个行为,而特征通过完整的方法定义来定义行为:即,它包括方法的主体。相比之下,mixin包含完整的方法定义,并且还可以通过成员变量携带状态,而特征通常不会。

使用

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

<?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来复用这两个方法。简单方便。

注意事项

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

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

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

<?php
trait A {
    public function smallTalk() {
        echo 'a';
    }
    public function bigTalk() {
        echo 'A';
    }
}
trait B {
    public function smallTalk() {
        echo 'b';
    }
    public function bigTalk() {
        echo 'B';
    }
}
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 'Hello ';
    }
}
trait World {
    public function sayWorld() {
        echo 'World!';
    }
}
trait HelloWorld {
    use Hello, World;
}
  • traits中可以定义abstract方法,同样的,use该traits的class,也需要实现这些abstract的方法;

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

关于php中的traits有什么用问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI