前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php Trait 基础应用讲解

php Trait 基础应用讲解

作者头像
1_bit
发布2021-01-14 16:55:36
4070
发布2021-01-14 16:55:36
举报
文章被收录于专栏:我的知识小屋我的知识小屋

首先,上手册:自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait。

随后。。。来讲解trait的用法:

代码语言:javascript
复制
trait first_trait {
    function first_trait() {//里面写你想写的代码
    }
    function second_trait() {//里面写你想写的代码
    }
    //http://blog.csdn.net/a757291228
}

首先不说怎么用,看了下面就懂怎么用了:

代码语言:javascript
复制
trait first_trait {
    function first_trait() {//里面写你想写的代码
    }
    function second_trait() {//里面写你想写的代码
    }
    //http://blog.csdn.net/a757291228
}
//新建一个类
class trait_user{
    // 在这里使用 first_trait
    use first_trait;
}
//new一个对象
$obj = new trait_user();
//随后obj就可以调用first_method了
$obj->first_trait(); 
$obj->second_trait();
//为何能够调用呢?那是因为我们在类里面使用了use然后把trait拿过来了,由于first_trait里面有这两个函数,所以我们新建类的时候就可以调用了=。=。。

解释写在代码块里面了,因为这样方便一点=。=。。。

以上就是trait的基本使用 ,当然也可以在一个类里面使用多个trait,如下:

代码语言:javascript
复制
trait first_trait {
    function first_trait() {//里面写你想写的代码
        echo '使用了f_1';
    }
    function second_trait() {//里面写你想写的代码
        echo '使用了f_2';
    }
}//http://blog.csdn.net/a757291228

trait second_trait {
    function s_first_trait() {//里面写你想写的代码
        echo '使用了s_1';
    }
    function s_second_trait() {//里面写你想写的代码
        echo '使用了s_2';
    }
}//http://blog.csdn.net/a757291228
//新建一个类
class trait_user{
    // 在这里使用 first_trait和second_trait 
    use first_trait,second_trait;
}
$obj = new trait_user();

$obj->first_trait(); 
$obj->second_trait();
//在这里我又多调用了另外的trait
$obj->s_first_trait();
$obj->s_second_trait();

以上就是使用多个trait…

我们还可以就是说在trait 里面use trait,就是trait里面用trait:

代码语言:javascript
复制
trait first_trait {
    function first_trait() {//里面写你想写的代码
        echo '使用了f_1';
    }
    function second_trait() {//里面写你想写的代码
        echo '使用了f_2';
    }
}

trait second_trait {
    //在这里使用了first_trait 。。。唔
    use first_trait;
    function s_first_trait() {//里面写你想写的代码
        echo '使用了s_1';
    }
    function s_second_trait() {//里面写你想写的代码
        echo '使用了s_2';
    }
}

//意思说只要类使用了second_trait那么同时可以使用first_trait里面的function

解释在注释 里面,使用我就不写咯=。=。。相比应该都懂了。。。

还有 一个就是冲突问题;例如两个trait里面有同名 的function,那么 该如何解决?手册中 写到,php5.4引入了新的关键字insteatdof和as,那么instead演示如下:

代码语言:javascript
复制
trait first_trait {
    function first_trait() {//同名function
        echo '使用了f_1';
    }
//http://blog.csdn.net/a757291228 强行安利
}

trait second_trait {
    function first_trait() {//同名function
        echo '使用了s_1';
    }

}

class trait_class {
    use first_trait, second_trait {
        first_trait::first_trait insteadof second_trait;
        //以上代码说明:在这里使用first_trait的同名函数替换掉second_trait中的,注意在这里是一对花括号里面写这个代码的。。。
    }
} 

以上代码就解决冲突咯。。。

接下来是as的用法:

代码语言:javascript
复制
<?php 

trait first_trait {
    function first_trait() {//同名function
        echo '使用了f_1';
    }

}

trait second_trait {
    function first_trait() {//同名function
        echo '使用了s_1';
    }

}

class Talker {
    use first_trait, second_trait {
        first_trait::first_trait insteadof second_trait;
        second_trait::first_trait as talk;
        //以上是as的用法=。=。。开始我一直搞不明白,哪里出问题了,错误信息让我有点懵,最后看了手册,发现需要insteadof另外一个trait才能使用as=。=。。这就非常 尴尬了,as就是别名的意思,第一个替换掉function后,随后用as指定之前 被替换掉的换一个名字使用,这样就可以都使用这两个function了
    }
}

//http://blog.csdn.net/a757291228 强行安利 以上就是5.4中的trait的基本用法了=。=。。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-02-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档