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 版权声明:本文为博主原创文章,转载请附上博文链接!