trait

Posted cjjjj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了trait相关的知识,希望对你有一定的参考价值。

简单的来说就是定义一块变量和函数,你想用的时候用use去使用它就use它一下。

它的用法很深,但是这里不做深究,为什么呢?一些东西你用不到,即使你现在记住它也没有什么意义不是吗?

倒不如把自己遇到的、不会的东西记住了,这样才会切实的改变自己的生活啊。

其实生活也是这样,你要做的就是不断尝试,尝试途中遇到了问题,从书本上寻找解决方法。

1. 目的

php5.4开始引入trait,其目的就是在于减少代码的重复,增加代码的复用性。

2. 使用场景

试想这样一种情况,当有一个方法需要在很多的类中使用时,该怎么处理? 
通常一般的处理方式会是,写一个基础类,在基类中实现这个方法,然后所有类都继承这个基类。

这是一种处理方法,但不是最好的处理方式。通常采用继承的情况是:几个类具有很大的相似性。比如人作为一个基类,学生、工人、等继承“人”这个基类来扩展。

由此,trait的作用就出来了,trait 可以在多个类中使用。
--------------------- 
作者:lemony_liu 
来源:CSDN 
原文:https://blog.csdn.net/lemony521/article/details/78322652 
版权声明:本文为博主原创文章,转载请附上博文链接!

3. 例子

<?php
trait ezcReflectionReturnInfo {
    function getReturnType() { /*1*/ }
    function getReturnDescription() { /*2*/ }
}

class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}

class ezcReflectionFunction extends ReflectionFunction {
    use ezcReflectionReturnInfo;
    /* ... */
}
?>
--------------------- 
作者:lemony_liu 
来源:CSDN 
原文:https://blog.csdn.net/lemony521/article/details/78322652 
版权声明:本文为博主原创文章,转载请附上博文链接!

4. 优先级

<?php
trait HelloWorld {
    public function sayHello() {
        echo ‘Hello World!‘;
    }
}

class TheWorldIsNotEnough {
    use HelloWorld;
    public function sayHello() {
        echo ‘Hello Universe!‘;
    }
}

$o = new TheWorldIsNotEnough();
$o->sayHello();//输出是 Hello Universe!
?>
--------------------- 
作者:lemony_liu 
来源:CSDN 
原文:https://blog.csdn.net/lemony521/article/details/78322652 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

以上是关于trait的主要内容,如果未能解决你的问题,请参考以下文章

PHP trait 特性

PHP的Trait机制

php Trait的使用

php中traits学习笔记

PHP代码复用特殊类Trait的简要说明和相关举例

trait技术详解,这次包你学得会