首页 后端开发 PHP问题 深入解析PHP trait

深入解析PHP trait

Aug 20, 2019 pm 04:59 PM
trait

自PHP5.4.0起,PHP实现了一种代码复用的方法,称为trait

众所周知,PHP中是单继承的,trait是为类似PHP的单继承语言而准备得一种代码复用机制。trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用method。trait和class组合的语义定义了一种减少复杂性的方式,避免传统多继承问题。

traitclass相似,但仅仅在用细粒度和一致的方式来组合功能。无法通过trait自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用的几个class之间不需要继承。

推荐PHP视频教程:https://www.php.cn/course/list/29/type/2.html

1、简单的例子

首先我们举个例子来介绍trait,和类定义相似,但使用关键字trait定义。在类中使用use组合。

<?php
trait T{
    public function t1(){
        return &#39;t1&#39;;
    }
    public function t2(){
        return &#39;t2&#39;;
    }
}
class Demo{
    use T;
    public function test(){
        return &#39;test&#39;;
    }多个
}
$demo = new Demo;
echo $demo->t1(),&#39;</br>&#39;;
echo $demo->test();
登录后复制

输出结果:

t1

test

2、多个trait冲突解决

如果使用多个trait,但是出现了方法名相同,这就出现了冲突,就要手动指定使用哪个trait的方法,使用insteadof关键字实现。

<?php
trait T{
    public function t1(){
        return &#39;t1&#39;;
    }
 
 
    public function t2(){
        return &#39;t2&#39;;
    }
}
 
 
trait T2{
    public function t1(){
        return &#39;t3&#39;;
    }
}
 
 
class Demo{
    use T,T2{
        //使用T的m1方法
        T::t1 insteadof T2;
    }
    public function test(){
        return &#39;test&#39;;
    }
}
 
 
$demo = new Demo;
echo $demo->t1(),&#39;</br>&#39;;
echo $demo->test();
登录后复制

输出结果:

t1

test

在冲突的时候,也可以使用use定义方法别名解决冲突,例子如下:

<?php
trait T{
    public function t1(){
        return &#39;t1&#39;;
    }
 
 
    public function t2(){
        return &#39;t2&#39;;
    }
}
 
 
trait T2{
    public function t1(){
        return &#39;t3&#39;;
    }
}
 
 
class Demo{
    use T,T2{
        //使用T的m1方法
        T::t1 insteadof T2;
        T2::t1 as new_t1;
    }
    public function test(){
        return &#39;test&#39;;
    }
}
 
 
$demo = new Demo;
echo $demo->t1(),&#39;</br>&#39;;
echo $demo->new_t1(),&#39;</br>&#39;;
echo $demo->test();
登录后复制

输出结果:

t1

t3

test

3、改变访问权限

也可以使用use关键字来改变方法的访问权限。

<?php
trait T{
    public function t1(){
        return &#39;t1&#39;;
    }
 
 
    public function t2(){
        return &#39;t2&#39;;
    }
}
 
 
class Demo{
    use T{
        t2 as protected;
    }
    public function test(){
        return &#39;test&#39;;
    }
}
 
 
$demo = new Demo;
echo $demo->t1(),&#39;</br>&#39;;
echo $demo->t2(),&#39;</br>&#39;;
echo $demo->test();
登录后复制

输出结果:

1566291679.png

上面知识介绍了一些常用的特性,详细可参考官方手册:

https://www.php.net/manual/zh/language.oop5.traits.php

更多PHP相关问题可以访问PHP中文网:https://www.php.cn/

谢谢!

以上是深入解析PHP trait的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PHP trait DTO:简化数据传输对象的开发 PHP trait DTO:简化数据传输对象的开发 Oct 12, 2023 am 09:04 AM

PHPtraitDTO:简化数据传输对象的开发引言:在现代的软件开发中,数据传输对象(DataTransferObject,简称DTO)起到了重要的作用。DTO是一种纯粹的数据容器,用于在层与层之间传递数据。然而,在开发过程中,开发人员需要编写大量的相似的代码来定义和操作DTO。为了简化这一过程,PHP中引入了trait特性,我们可以利用trait特

深入了解PHP trait DTO的设计模式与实践 深入了解PHP trait DTO的设计模式与实践 Oct 12, 2023 am 08:48 AM

深入了解PHPtraitDTO的设计模式与实践Introduction:在PHP开发中,设计模式是必不可少的一部分。其中,DTO(DataTransferObject)是一种常用的设计模式,用于封装数据传输的对象。而在实现DTO的过程中,使用trait(特征)可以有效地提高代码的复用性和灵活性。本文将深入探讨PHP中traitDTO的设计模式与实践

PHP trait DTO:优化数据传输过程的关键利器 PHP trait DTO:优化数据传输过程的关键利器 Oct 12, 2023 pm 03:10 PM

PHPtraitDTO:优化数据传输过程的关键利器,需要具体代码示例简介:在开发过程中,数据传输是一个非常常见的需求,尤其是在不同层级之间传递数据时。在传输这些数据过程中,我们常常需要对数据进行处理、验证或者转换,以满足不同的业务需求。为了提高代码的可读性和可维护性,我们可以使用PHPtraitDTO(DataTransferObject)来优化

PHP trait DTO:实现数据传输对象的简洁性与灵活性 PHP trait DTO:实现数据传输对象的简洁性与灵活性 Oct 12, 2023 am 10:21 AM

PHPtraitDTO:实现数据传输对象的简洁性与灵活性引言:在PHP开发过程中,经常会涉及到数据的传输与处理。而传输对象模式(DataTransferObject,简称DTO)是一种设计模式,它用于将数据在不同层之间传输。在传输过程中,DTO通过封装数据、提供公共访问方法来简化数据的操作。本文将介绍如何使用PHPtrait来实现DT

使用PHP trait DTO实现高度可定制的数据传输框架 使用PHP trait DTO实现高度可定制的数据传输框架 Oct 12, 2023 pm 12:46 PM

使用PHPtraitDTO实现高度可定制的数据传输框架随着网站和应用程序变得越来越复杂,数据传输变得越来越重要。在PHP中,通过使用数据传输对象(DataTransferObject,简称DTO)来处理数据传输可以大大简化代码,并提高可维护性和扩展性。本文将介绍如何使用PHPtrait和DTO实现一个高度可定制的数据传输框架,并提供相应的代码示例。

PHP trait DTO:优雅的数据传输对象模式 PHP trait DTO:优雅的数据传输对象模式 Oct 12, 2023 am 08:34 AM

PHPtraitDTO:优雅的数据传输对象模式概述:数据传输对象(DataTransferObject,简称DTO)是一种设计模式,用于在不同层之间传输数据。在应用程序中,经常需要从数据库或外部服务获取数据,并在应用程序的不同层之间进行传递。DTO模式可以使得数据传输更加简洁、清晰,同时也便于扩展和维护。在PHP中,我们可以使用trait来实现DTO

PHP trait DTO:优化数据传输流程的关键工具 PHP trait DTO:优化数据传输流程的关键工具 Oct 12, 2023 am 09:27 AM

PHPtraitDTO:优化数据传输流程的关键工具,需要具体代码示例在开发过程中,数据的传输是一个十分关键的环节。如何高效地传输数据,成为了开发者们需要解决的难题之一。PHP语言中,使用traitDTO(DataTransferObject)可以优化数据传输流程,提高数据传输的效率。本文将介绍什么是traitDTO,以及如何使用它来优化数据传输流

如何使用 trait 扩展自定义 PHP 函数? 如何使用 trait 扩展自定义 PHP 函数? Apr 23, 2024 am 09:27 AM

如何使用trait扩展自定义PHP函数?定义一个包含扩展方法的trait。使用use关键字将trait包含到自定义函数中。在自定义函数中通过$this访问trait方法。

See all articles