PHP的Trait机制原理与用法分析

本文实例讲述了PHP的Trait机制原理与用法。分享给大家供大家参考,具体如下:

Trait介绍:

1、自PHP5.4起,PHP实现了一种代码复用的方法,称为trait。
2、Trait是为类似PHP的单继承语言二准备的一种代码复用机制。
3、Trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用method。
4、trait实现了代码的复用,突破了单继承的限制;
5、trait是类,但是不能实例化。
6、当类中方法重名时,优先级,当前类>trait>父类;
7、当多个trait类的方法重名时,需要指定访问哪一个,给其它的方法起别名。

示例:

trait Demo1{
 public function hello1(){
  return __METHOD__;
 }
}
trait Demo2{
 public function hello2(){
  return __METHOD__;
 }
}
class Demo{
 use Demo1,Demo2;//继承Demo1和Demo2
 public function hello(){
  return __METHOD__;
 }
 public function test1(){
  //调用Demo1的方法
  return $this->hello1();
 }
 public function test2(){
  //调用Demo2的方法
  return $this->hello2();
 }
}
$cls = new Demo();
echo $cls->hello();
echo "";
echo $cls->test1();
echo "";
echo $cls->test2();

运行结果:

Demo::hello
Demo1::hello1
Demo2::hello2

多个trait方法重名:

trait Demo1{
 public function test(){
  return __METHOD__;
 }
}
trait Demo2{
 public function test(){
  return __METHOD__;
 }
}
class Demo{
 use Demo1,Demo2{
  //Demo1的hello替换Demo2的hello方法
  Demo1::test insteadof Demo2;
  //Demo2的hello起别名
  Demo2::test as Demo2test;
 }
 public function test1(){
  //调用Demo1的方法
  return $this->test();
 }
 public function test2(){
  //调用Demo2的方法
  return $this->Demo2test();
 }
}
$cls = new Demo();
echo $cls->test1();
echo "";
echo $cls->test2();

运行结果:

Demo1::test
Demo2::test

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

(0)

相关推荐

  • PHP中Trait及其应用详解

    从PHP的5.4.0版本开始,PHP提供了一种全新的代码复用的概念,那就是Trait.Trait其字面意思是"特性"."特点",我们可以理解为,使用Trait关键字,可以为PHP中的类添加新的特性. 熟悉面向对象的都知道,软件开发中常用的代码复用有继承和多态两种方式.在PHP中,只能实现单继承.而Trait则避免了这点.下面通过简单的额例子来进行对比说明. 1. 继承 VS 多态 VS Trait 现在有Publish.php和Answer.php这两个类.要在其中

  • php 5.4 全新的代码复用Trait详解

    从PHP的5.4.0版本开始,PHP提供了一种全新的代码复用的概念,那就是Trait.Trait其字面意思是"特性"."特点",我们可以理解为,使用Trait关键字,可以为PHP中的类添加新的特性. 熟悉面向对象的都知道,软件开发中常用的代码复用有继承和多态两种方式.在PHP中,只能实现单继承.而Trait则避免了这点.下面通过简单的额例子来进行对比说明. 1. 继承 VS 多态 VS Trait 现在有Publish.php和Answer.php这两个类.要在其中

  • 浅谈PHP中的Trait使用方法

    概述 在PHP中有一种代码复用的技术, 因为单继承的问题, 有些公共方法无法在父类中写出, 而 Trait可以应对这种情况, 它可以定义一些复用的方法, 然后在你需要使用的类中将其引入即可. 刚开始的时候给我的感觉就是将trait代码块直接拿到类中的意思, 但后来我发现, 我太天真了. PHP中的Trait用法: 问题 当我第一次使用的时候, 因为之前一直使用抽象类, 或者定义内部对象, 然后调用内部对象中的方法, 所以我当时有了以下几个问题: 1.能否引入多个, 如果可以的话, 同名方法如何处

  • PHP 实现代码复用的一个方法 traits新特性

    在阅读yii2源码的时候接触到了trait,就学习了一下,写下博客记录一下. 自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits. Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制.Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集.Traits 和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题. Trait 和一个类相似,但仅仅旨在用细粒度和一致的方式来组

  • PHP Trait代码复用类与多继承实现方法详解

    本文实例讲述了PHP Trait代码复用类与多继承实现方法.分享给大家供大家参考,具体如下: 前言 众所周知,一直以来PHP和很多语言一样是单继承的语言,但是常常在编码过程中,我们需要在当前类中使用两个或两个以上的其他类的方法,这种情况下继承就不能实现,而往往采用new方式实例化很多要用到的类,这样就会很影响代码的结构和开发规范.于是Trait类诞生了,它是一种代码复用的语法,能够实现一个类中引用多个其他类的方法. 一.概念 PHP官方手册对Trait的描述是: Trait是为类似PHP的单继承

  • PHP中trait使用方法详细介绍

    说通俗点,PHP中使用trait关键字是为了解决一个类既想集成基类的属性和方法,又想拥有别的基类的方法,而trait一般情况下是和use搭配使用的. <?php trait Drive { public $carName = 'trait'; public function driving() { echo "driving {$this->carName}\n"; } } class Person { public function eat() { echo "

  • PHP中的traits实现代码复用使用实例

    PHP5.4后新增traits实现代码复用机制,Trait和类相似,但不能被实例化,无需继承,只需要在类中使用关键词use引入即可,可引入多个Traits,用','隔开. (1)Trait简单使用 <?php trait A { public $var1 = 'test1'; public function test1() { echo 'trait A::test1()'; } } trait B { public $var2 = 'test2'; public function test2(

  • PHP中的Trait 特性及作用

    自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits. Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制.Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集.Traits 和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题. Trait 和一个类相似,但仅仅旨在用细粒度和一致的方式来组合功能.Trait 不能通过它自身来实例化.它为传统继承增加了水平特性的组合:

  • 详解PHP神奇又有用的Trait

    php和java,c++一样都是单继承模式.但是像python,是支持多继承(即Mixin模式).那么如何在php中实现多继承模式?这就需要使用trait. trait Arrayabletrait{ public function toArray(){ } } class Model{ use Arrayabletrait; } $model = new Model(); $model->toArray(); Trait使用场景 有些功能不需要类的方法属性,但是在不同的类都有使用需求.例如上面

  • PHP中的traits简单使用实例

    PHP 5.4中的traits,是新引入的特性,中文还真不知道如何准确翻译好.其实际的目的,是为了有的场合想用多继承,但PHP又没多继承,于是就发明了这样的一个东西.        Traits可以理解为一组能被不同的类都能调用到的方法集合,但Traits不是类!不能被实例化.先来例子看下语法: <?php trait myTrait{ function traitMethod1(){} function traitMethod2(){} } //然后是调用这个traits,语法为: class

  • 详解PHP中的Traits

    PHP是单继承的语言,在PHP 5.4 Traits出现之前,PHP的类无法同时从两个基类继承属性或方法.php的Traits和Go语言的组合功能类似,通过在类中使用use关键字声明要组合的Trait名称,而具体某个Trait的声明使用trait关键词,Trait不能直接实例化.具体用法请看下面的代码: <?php trait Drive { public $carName = 'trait'; public function driving() { echo "driving {$thi

随机推荐