首先,上手册:自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait。

随后。。。来讲解trait的用法:

trait first_trait {function first_trait() {//里面写你想写的代码}function second_trait() {//里面写你想写的代码}//http://blog.csdn.net/a757291228
}

首先不说怎么用,看了下面就懂怎么用了:

trait first_trait {function first_trait() {//里面写你想写的代码}function second_trait() {//里面写你想写的代码}//http://blog.csdn.net/a757291228
}
//新建一个类
class trait_user{// 在这里使用 first_traituse first_trait;
}
//new一个对象
$obj = new trait_user();
//随后obj就可以调用first_method了
$obj->first_trait();
$obj->second_trait();
//为何能够调用呢?那是因为我们在类里面使用了use然后把trait拿过来了,由于first_trait里面有这两个函数,所以我们新建类的时候就可以调用了=。=。。

解释写在代码块里面了,因为这样方便一点=。=。。。

以上就是trait的基本使用 ,当然也可以在一个类里面使用多个trait,如下:

trait first_trait {function first_trait() {//里面写你想写的代码echo '使用了f_1';}function second_trait() {//里面写你想写的代码echo '使用了f_2';}
}//http://blog.csdn.net/a757291228trait second_trait {function s_first_trait() {//里面写你想写的代码echo '使用了s_1';}function s_second_trait() {//里面写你想写的代码echo '使用了s_2';}
}//http://blog.csdn.net/a757291228
//新建一个类
class trait_user{// 在这里使用 first_trait和second_trait use first_trait,second_trait;
}
$obj = new trait_user();$obj->first_trait();
$obj->second_trait();
//在这里我又多调用了另外的trait
$obj->s_first_trait();
$obj->s_second_trait();

以上就是使用多个trait…

我们还可以就是说在trait 里面use trait,就是trait里面用trait:

trait first_trait {function first_trait() {//里面写你想写的代码echo '使用了f_1';}function second_trait() {//里面写你想写的代码echo '使用了f_2';}
}trait second_trait {//在这里使用了first_trait 。。。唔use first_trait;function s_first_trait() {//里面写你想写的代码echo '使用了s_1';}function s_second_trait() {//里面写你想写的代码echo '使用了s_2';}
}//意思说只要类使用了second_trait那么同时可以使用first_trait里面的function

解释在注释 里面,使用我就不写咯=。=。。相比应该都懂了。。。

还有 一个就是冲突问题;例如两个trait里面有同名 的function,那么 该如何解决?手册中 写到,php5.4引入了新的关键字insteatdof和as,那么instead演示如下:

trait first_trait {function first_trait() {//同名functionecho '使用了f_1';}
//http://blog.csdn.net/a757291228 强行安利
}trait second_trait {function first_trait() {//同名functionecho '使用了s_1';}}class trait_class {use first_trait, second_trait {first_trait::first_trait insteadof second_trait;//以上代码说明:在这里使用first_trait的同名函数替换掉second_trait中的,注意在这里是一对花括号里面写这个代码的。。。}
} 

以上代码就解决冲突咯。。。

接下来是as的用法:

<?php trait first_trait {function first_trait() {//同名functionecho '使用了f_1';}}trait second_trait {function first_trait() {//同名functionecho '使用了s_1';}}class Talker {use first_trait, second_trait {first_trait::first_trait insteadof second_trait;second_trait::first_trait as talk;//以上是as的用法=。=。。开始我一直搞不明白,哪里出问题了,错误信息让我有点懵,最后看了手册,发现需要insteadof另外一个trait才能使用as=。=。。这就非常 尴尬了,as就是别名的意思,第一个替换掉function后,随后用as指定之前 被替换掉的换一个名字使用,这样就可以都使用这两个function了}
}

//http://blog.csdn.net/a757291228 强行安利
以上就是5.4中的trait的基本用法了=。=。。

php Trait 基础应用讲解相关推荐

  1. python实现录音并去燥_Python实现电脑录音(含音频基础知识讲解)

    Python实现电脑录音(含音频基础知识讲解) 前言 今天开始进入近期系列文章的第一篇,如何用 Python 来实现录音功能. 在开始"造轮子"之前,个人一直强调一个观点,如果有些 ...

  2. python classmethod知识_python基础知识讲解——@classmethod和@staticmethod的作用

    python基础知识讲解--@classmethod和@staticmethod的作用 在类的成员函数中,可以添加@classmethod和@staticmethod修饰符,这两者有一定的差异,简单来 ...

  3. Tinyshop前后台操作基础教程讲解

    Tinyshop前后台操作基础教程讲解 01 tinyshop v3框架的安装 [录播]tinyshop v3框架的安装(8分钟) 02 tinyshop v3框架的后台基本参数配 [录播]tinys ...

  4. Linux 基础命令讲解--加密解密

    Linux 基础命令讲解--加密解密 加密文件: 1.MD5 echo -n "string" | openssl md5   #加密字符串 openssl md5 -in tes ...

  5. C++动态内存管理好难怎么办?零基础图文讲解,小白轻松理解原理

    首先我们先了解一下内存: C语言使用malloc/free动态管理内存空间,C++引入了new/delete,new[]/delete[]来动态管理内存. 如果大家在自学C++中遇到困难,想找一个学习 ...

  6. STM32驱动开发(二)--USB Device RNDIS虚拟网卡(USB2.0 基础概念讲解)

    STM32驱动开发(二)–USB Device RNDIS虚拟网卡(USB2.0基础概念讲解) 一.简介   本文基于stm32 Rndis实例,github开源, 使用STM32F407单板.结合协 ...

  7. 什么是防火墙?防火墙基础知识讲解

     什么是防火墙?防火墙基础知识讲解 - 云+社区 - 腾讯云 什么是防火墙 防火墙也被称为防护墙,它是一种位于内部网络与外部网络之间的网络安全系统,可以将内部网络和外部网络隔离.通常,防火墙可以保护内 ...

  8. Eggjs入门系列-基础全面讲解(完结)

    对上篇文章回顾下,上篇讲到了 服务(Service) 插件 定时任务 框架扩展 启动自定义 应用部署 日志 HttpClient Cookie 与 Session Cookie 通过 ctx.cook ...

  9. FLASH脚本基础入门讲解1

    1.FLASH脚本基础入门讲解.按钮AS的编写.影片剪辑的AS编写 认识"动作"面板 在Flash中,动作脚本的编写,都是在"动作"面板的编辑环境中进行,熟悉& ...

最新文章

  1. FPGA之道(59)时空变换之时域优化
  2. C语言,C#,Java,JavaScript之强类型与弱类型
  3. android 自定义图片上传,android自定义ImageView仿图片上传(示例代码)
  4. Docker入门-docker compose的使用
  5. java中使用akka手记三 cluster详例
  6. angular组件--tips提示功能
  7. Zabbix3.0 安装Graphtree
  8. java并发之CAS
  9. 女人,就是不适合做IT!
  10. make clean指令出现问题
  11. spring整合shiro
  12. 嵌入式Linux结课报告,嵌入式课程报告.doc
  13. 【游戏周边】Unity,UDK,Unreal Engine4或者CryENGINE——我应该选择哪一个游戏引擎...
  14. RedHat7安装QQ
  15. python有道批量单词音标整理-python调用有道智云API实现文件批量翻译
  16. 多媒体技术计算题、操作题
  17. centos7.6安装mysql数据库_CentOS7.6安装MYSQL8.0
  18. 【学习笔记】C++ GUI Qt4 第六章 6.4 滚动区域 和 6.5 停靠窗口和工具栏
  19. scheduling agreement 计划协议详解
  20. Webpack神坑之imports-loader

热门文章

  1. 从 3.1 到 5.0 —— OpenReservation 更新记
  2. ​设计模式之装饰模式
  3. .NET Core 在 K8S 上的开发实践--学习笔记
  4. net core WebApi——使用xUnits来实现单元测试
  5. 初探奥尔良(Orleans)
  6. 使用Roslyn脚本化C#代码,C#动态脚本实现方案
  7. 一步步部署基于Windows系统的Jenkins持续集成环境
  8. 开源组件NanUI一周年 - 使用HTML/CSS/JS来构建.Net Winform应用程序界面
  9. 理解C# 4 dynamic(2) – ExpandoObject的使用
  10. Visual Studio 20周年软件趋势随想