了解PHP中的Trait 特性及作用

了解PHP中的Trait 特性及作用

自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。

Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集。Traits 和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题。

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

Trait是在PHP5.4中加入的,它既不是接口也不是类。主要是为了解决单继承语言的限制。是PHP多重继承的一种解决方案。例如,需要同时继承两个 Abstract Class, 这将会是件很麻烦的事情,Trait 就是为了解决这个问题。它能被加入到一个或多个已经存在的类中。它声明了类能做什么(表明了其接口特性),同时也包含了具体实现(表明了其类特性)

简单使用

首先,当然是声明个 Trait,PHP5.4 增加了 trait 关键字

trait first_trait {
function first_method() { /* Code Here */ }
function second_method() { /* Code Here */ }
}

同时,如果要在 Class 中使用该 Trait,那么使用 use 关键字

class first_class {
// 注意这行,声明使用 first_trait
use first_trait;
}
$obj = new first_class();
// Executing the method from trait
$obj->first_method(); // valid
$obj->second_method(); // valid

使用多个 Trait

在同个 Class 中可以使用多个 Trait

trait first_trait
{
function first_method() { echo "method"; }
}
trait second_trait {
function second_method() { echo "method"; }
}
class first_class {
// now using more than one trait
use first_trait, second_trait;
}
$obj= new first_class();
// Valid
$obj->first_method(); // Print : method
// Valid
$obj->second_method(); // Print : method

Trait 之间的嵌套

同时,Trait 之间也可以相互的嵌套,例如

trait first_trait {
function first_method() { echo "method"; }
}
trait second_trait {
use first_trait;
function second_method() { echo "method"; }
}
class first_class {
// now using 
use second_trait;
}
$obj= new first_class();
// Valid
$obj->first_method(); // Print : method
// Valid
$obj->second_method(); // Print : method

Trait 的抽象方法(Abstract Method)

我们可以在 Trait 中声明需要实现的抽象方法,这样能使使用它的 Class 必须实现它

trait first_trait {
function first_method() { echo "method"; }
// 这里可以加入修饰符,说明调用类必须实现它
abstract public function second_method();
}
class first_method {
use first_trait;
function second_method() {
/* Code Here */
}
}

Trait 冲突

多个 Trait 之间同时使用难免会冲突,这需要我们去解决。PHP5.4 从语法方面带入了相关 的关键字语法:insteadof 以及 as ,用法参见

trait first_trait {
function first_function() { 
echo "From First Trait";
}
}
trait second_trait {
// 这里的名称和 first_trait 一样,会有冲突
function first_function() { 
echo "From Second Trait";
}
}
class first_class {
use first_trait, second_trait {
// 在这里声明使用 first_trait 的 first_function 替换
// second_trait 中声明的
first_trait::first_function insteadof second_trait;
}
} 
$obj = new first_class();
// Output: From First Trait
$obj->first_function();

上面就是些 Trait 比较基本的使用了,更详细的可以参考官方手册。这里总结下注意的几 点:

Trait 会覆盖调用类继承的父类方法

Trait 无法如 Class 一样使用 new 实例化

单个 Trait 可由多个 Trait 组成

在单个 Class 中,可以使用多个 Trait

Trait 支持修饰词(modifiers),例如 final、static、abstract

我们能使用 insteadof 以及 as 操作符解决 Trait 之间的冲突

关于了解PHP中的Trait 特性及作用的文章就分享到这,如果对你有帮助欢迎继续关注我们哦

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/40794.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
php学习php学习订阅用户
上一篇 2022年6月16日 23:26
下一篇 2022年6月16日 23:26

相关推荐

  • PHP实现邮件分组发送的方法。

    随着网络通讯的普及,电子邮件已经成为了人们日常生活中不可或缺的一部分。在现代的企业、机构和个人中,发送邮件已经成为了必备的工作环节之一。在许多应用场景中,我们需要向一组人或多组人发送邮件,这时候就需…

    2023年5月28日
    03
  • php如何调用phantomJS截图

    php调用phantomJS截图知识储备*unix系统安装phantomjs,权限相关知识基本JavaScript语法知识php exec函数调用REPL phantomjsphantomjs js截图文档 http://javascript.ruanyifeng.com/tool/phantomjs.html代码(php 代…

    2022年6月23日
    0172
  • PHP实现MongoDB数据库主从复制的方法。

    在现代的网络应用程序中,数据处理和管理是至关重要的任务。随着Web应用程序变得越来越复杂,需要处理海量数据,存储和处理这些数据的数据库也越来越多了。MongoDB是一种NoSQL数据库,在Web应用程序中被广泛使用。…

    2023年5月21日
    00
  • PHP与数据库容器的集成。

    随着云计算技术的发展,越来越多的企业开始将应用部署到容器环境中,从而实现了程序的快速交付和部署。PHP作为一种常用的Web开发语言,也在这一趋势下与数据库容器进行集成,为企业带来了更快速和可靠的应用开发体…

    2023年5月21日
    00
  • PHP8函数:fdiv()的精度计算技巧。

    PHP8是目前最新的PHP语言版本,它引入了许多令人兴奋的新功能和改进。其中之一就是fdiv()函数,它可以用于准确地计算浮点数的除法运算。在以前的PHP版本中,使用基本的除法运算符(/)可能会导致精度问题。这是因为…

    2023年5月21日
    01
  • PHP实现数据库主从复制故障恢复的方法。

    随着互联网的迅速发展,大量的数据需要存储和处理,因此数据库成为现代应用开发中不可或缺的一部分。而在现实应用中,由于网络环境、硬件故障等多种因素的影响,数据库主从复制的故障恢复常常是一项必不可少的任务…

    2023年5月21日
    04
  • PHP8函数:str_contains()的新用途。

    PHP 8是一款功能更强大的编程语言,它引入了许多新的函数和特性,其中之一就是str_contains()函数。str_contains()函数主要用于检查字符串中是否包含指定的子字符串,它可以用于各种不同的应用程序中,例如搜索引擎…

    2023年5月21日
    05
  • PHP实现Oracle数据库集群的方法。

    在当前的互联网时代下,高可用性的需求变得越来越大。而数据库作为企业数据的核心,需要满足在面临各种异常情况时依然保持业务的正常运行。因此,数据库集群成为了当前较为流行的实现高可用性解决方案之一。本文将…

    2023年5月21日
    00

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息