分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

php Trait的使用

发布时间:2023-09-06 02:19责任编辑:郭大石关键词:暂无标签

1、php中的trait是啥?

  看上去既像类又像接口,其实都不是,Trait可以看做类的部分实现,可以混入一个或多个现有的PHP类中,其作用有两个:表明类可以做什么;提供模块化实现。Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。

2、PHP版本要求:

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

3、trait的使用场景:

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

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

  由此,trait的作用就出来了,trait 可以在多个类中使用。

4、trait如何使用:

  引用PHP手册中的例子:

  例子一

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

1、先声明一个trait;
2、在类中使用use将该trait引入。
  是不是非常简单(手动逃)?需要注意的是trait的优先级。

5、trait的优先级

  (敲黑板)从基类继承的成员会被 trait 插入的成员所覆盖。优先顺序是来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法。

  优先级:自身方法>trait的方法>继承的方法(就是这样子的。)

看例子

  

<?phptrait HelloWorld { ???public function sayHello() { ???????echo ‘Hello World!‘; ???}}class TheWorldIsNotEnough { ???use HelloWorld; ???public function sayHello() { ???????echo ‘Hello Universe!‘; ???}}$o = new TheWorldIsNotEnough();$o->sayHello();//输出是 Hello Universe!?>

还有一点需要注意的是:多个trait的使用。

<?phptrait Hello { ???public function sayHello() { ???????echo ‘Hello ‘; ???}}trait World { ???public function sayWorld() { ???????echo ‘World‘; ???}}class MyHelloWorld { ???use Hello, World; ???public function sayExclamationMark() { ???????echo ‘!‘; ???}}$o = new MyHelloWorld();$o->sayHello();$o->sayWorld();$o->sayExclamationMark();?>

  总结:Trait是一种代码复用技术,为PHP的单继承限制提供了一套灵活的代码复用机制。

php Trait的使用

原文地址:https://www.cnblogs.com/ldj3/p/9855484.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved