PHP Trait功能与用法实例分析
本文实例讲述了PHP Trait功能与用法。分享给大家供大家参考,具体如下:
Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。
1.如果引入的Trait有同名的方法
trait A{ public function eat(){ echo 'A-eat'; } public function say(){ echo 'A-say'; } } trait B{ public function eat(){ echo 'B-eat'; } public function say(){ echo 'B-say'; } } class People{ use A,B{ A::eat insteadof B; B::eat as eatbak; B::say insteadof A; } } $people = new People(); $people->eat(); echo "<br/>"; $people->say(); echo "<br/>"; $people->eatbak();
运行结果:
A-eat
B-say
B-eat
2.修改访问控制
<?php trait Test { public function say() { echo 'say hello'; } } class People { use Test { say as protected; } } $people = new People(); $people->say();
运行结果:
Fatal error: Call to protected method People::say() from context '' in D:\phpdemo\trait_Demo.php on line 14
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
相关推荐
-
详解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中的Trait 特性及作用
自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits. Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制.Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集.Traits 和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题. Trait 和一个类相似,但仅仅旨在用细粒度和一致的方式来组合功能.Trait 不能通过它自身来实例化.它为传统继承增加了水平特性的组合:
-
简单谈谈PHP中的trait
前言 之前的一个同事换工作,在面试被问到了 PHP 的 trait .因为没用过, 所以没答好,我大概是用过几次的,想了想整理了以下的总结. trait trait 是在一些类(Class)的应该具备的特定的属性或方法,而同父级的另外一些类应该避免包含这些属性和方法情况下使用的. 当然, 这也和开发者对类的抽象能力有关, 有些抽象能力好的, 可以减少对 trait 的使用 但是这种情况应该是无法避免的 不然 trait 出现就毫无意义了. 还有一种情况, 就是使用 trait 的时候, 可以起到
-
PHP中Trait及其应用详解
从PHP的5.4.0版本开始,PHP提供了一种全新的代码复用的概念,那就是Trait.Trait其字面意思是"特性"."特点",我们可以理解为,使用Trait关键字,可以为PHP中的类添加新的特性. 熟悉面向对象的都知道,软件开发中常用的代码复用有继承和多态两种方式.在PHP中,只能实现单继承.而Trait则避免了这点.下面通过简单的额例子来进行对比说明. 1. 继承 VS 多态 VS Trait 现在有Publish.php和Answer.php这两个类.要在其中
-
PHP中用Trait封装单例模式的实现
单例模式的定义 确保某一个类只有一个实例,不能重复实例,只能它自己实例化,而且向整个系统提供这个实例. 解决的问题 即一个类只被实例化一次,当其他人对其再次实例化时,返回第一次实例化的对象,可以避免大量的 new 操作,减少资源的消耗. 原则:四步走,三私一公 私有化静态属性 私有化构造方法 私有化克隆方法 公有化静态方法 封装背景 当项目中有多个单例类,每新建一个类,都得做三私一公的定义,就显得有些做重复工作了,不仅仅浪费时间浪费精力,而且代码臃肿且难维护,有没有 更优雅 的写法呢? Trai
-
PHP Trait代码复用类与多继承实现方法详解
本文实例讲述了PHP Trait代码复用类与多继承实现方法.分享给大家供大家参考,具体如下: 前言 众所周知,一直以来PHP和很多语言一样是单继承的语言,但是常常在编码过程中,我们需要在当前类中使用两个或两个以上的其他类的方法,这种情况下继承就不能实现,而往往采用new方式实例化很多要用到的类,这样就会很影响代码的结构和开发规范.于是Trait类诞生了,它是一种代码复用的语法,能够实现一个类中引用多个其他类的方法. 一.概念 PHP官方手册对Trait的描述是: Trait是为类似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机制原理与用法.分享给大家供大家参考,具体如下: Trait介绍: 1.自PHP5.4起,PHP实现了一种代码复用的方法,称为trait. 2.Trait是为类似PHP的单继承语言二准备的一种代码复用机制. 3.Trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用method. 4.trait实现了代码的复用,突破了单继承的限制: 5.trait是类,但是不能实例化. 6.当类中方法重名时,优先级,当前类>trait>父类; 7
-
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中使用trait关键字是为了解决一个类既想集成基类的属性和方法,又想拥有别的基类的方法,而trait一般情况下是和use搭配使用的. <?php trait Drive { public $carName = 'trait'; public function driving() { echo "driving {$this->carName}\n"; } } class Person { public function eat() { echo "
随机推荐
- iOS应用开发中矢量图的使用及修改矢量图颜色的方法
- php中strtotime函数用法详解
- php设计模式之观察者模式的应用详解
- php基础知识:类与对象(2) 自动加载对象
- 用SQL实现统计报表中的"小计"与"合计"的方法详解
- CentOS7 Nexus安装步骤详细介绍
- 浅谈jquery事件处理
- PowerShell Out-File指定文件编码的方法
- Oracle数据安全面面观
- JS获取input file绝对路径的方法(推荐)
- javascript控制图片播放的实现代码
- 详解JavaScript的策略模式编程
- Android实现动态高斯模糊效果示例代码
- Android中系统自带锁WalkLock与KeyguardLock用法实例详解
- 打造计数器DIY三步曲(上)
- Python 用Redis简单实现分布式爬虫的方法
- 为什么入门大数据选择Python而不是Java?
- koa+jwt实现token验证与刷新功能
- Android自定义控件ViewGroup实现标签云
- Vuejs中的watch实例详解(监听者)