电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOCX文档下载
分享到微信 分享到微博 分享到QQ空间

PHP5.4以后新增的trait功能使用介绍

  • 资源ID:53836139       资源大小:31.09KB        全文页数:6页
  • 资源格式: DOCX        下载积分:0金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要0金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

PHP5.4以后新增的trait功能使用介绍

PHP5.4PHP5.4 以后新增的以后新增的 traittrait 功能使用介绍功能使用介绍trait 是 php5.4 以后新增加的一个功能,可以将多个类中,共用的一些属性和方法提取出来做来公共 trait 类,就像是装配汽车的配件,如果你的类中要用到这些配件,就直接用 use 导入就可以了,相当于把 trait 中的代码复制到当前类中.因为 trait 不是类,所以不能有静态成员,类常量,当然也不可能被实例化。其实一个类中的代码,可以分为二大部分:一是我们自己写的代码,暂且叫私有代码吧,还有一部分就是公共代码了,之前主要是由父类代码组成。现在你的类中的公共代码又多一个新成员:trait 类代码。如果说:继承可以纵向扩展一个类,那么 trait 就是横向扩展一个类功能下面以实例进行演示:/1 创建一个 trait 类 Test1? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23hello1(); /访问 trait 类 Test1 中的 hello1()echo '' echo $obj->name; /访问 ttrait 类 Test1 中的$name 属性 echo '' echo $obj->hello2(); /访问 ttrait 类 Test1 中的 hello2()trait 可以互相嵌套,一个 trait 类中可以用 use 导入另一个 trait 类,理解成代码复制就可以了.例如本例中,在 Test2 中要用到 Test1 中的代码,我们只要改动二个地方就可以了。一是在 Test2 中用 use Test1;导入 Test1 中的代码,二是在 Demo1 类中的,去掉对 Test1 的引用,只保留对 Test2 的引用,想想这是为什么?给大家当作一个思考题吧修改后的代码如下:/1 创建一个 trait 类 Test1? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20name; /3.创建 Demo1 类21 22 23 24 25 26 27 28 29class Demo1 / use Test1, Test2; use Test2; /进行测试$obj = new Demo1; echo $obj->hello1(); /访问 trait 类 Test1 中的 hello1()echo '' echo $obj->name; /访问 ttrait 类 Test1 中的$name 属性 echo '' echo $obj->hello2(); /访问 ttrait 类 Test1 中的 hello2()刚才说过,类中导入的公共代码,除了 trait 方法集,还可以有父类,如果在子类中访问父类中的成员,大家应该很熟悉了,现在一个类除了可以从父类继承成员,还可以从trait 类中继承,那么有一个问题就不可避免了,如果父类和 trait 类中的成员命名冲突怎么办?说人话,就是重名了怎么办?下面我们以方法重名来演示一下处理方案。再创建一个类 Demo,做为 Demo1 类的父类。/3.创建父类 Demo? 1 2 3 4 5 6 7 8class Demo /在父类中创建一个与 Test2 重名的方法 hello2()public function hello2() return '父类 Demo:hello2()' 代码如下:? 1 2 3 4 5 6 7/1 创建一个 trait 类 Test1trait Test1 public $name = 'PHP 中文网' /trait 类中可以用属性 public function hello1() /trait 类中主要成员是方法 return 'Test1:hello1()'8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 /2.创建 triat 类 Test2trait Test2 use Test1; function hello2() /在 Test2 中访问 Test1 中的属性 name,注意语法与普通类是一样的return 'Test2:hello2()'.$this->name; /3.创建父类 Democlass Demo public function hello2() return '父类 Demo:hello2()' /4.创建 Demo1 类class Demo1 extends Demo / use Test1, Test2; use Test2; /进行测试 捕鱼游戏 http:/www.44771.net$obj = new Demo1; echo $obj->hello1(); /访问 trait 类 Test1 中的 hello1()echo '' echo $obj->name; /访问 ttrait 类 Test1 中的$name 属性 echo '' echo $obj->hello2(); /访问 ttrait 类 Test1 中的 hello2()再次访问,会发现,结果与之前完全一样没有任何变化,父类 Demo 中的 hello2 方法好像隐身了,压根不存在一样的。事实上,父类 Demo 中的 hello2 方法当然是存在的,只是被trat 类 Test2 中的同名方法 hello2 覆盖掉了,原因就是:trait 类中的同名方法,访问优先级大于父类的同名方法。如果我们就想访问父类中的 hello2 方法,怎么办呢?只有一个办法,要么父类方法改名,要么 Test2 中的方法改名,我们把 Test2 中的 hello2 方法改成 hello3,再次访问,就可以看到父类的执行结果了。那么,我们再进一点想一下,如果在子类也有一个 hello2 方法呢?那么结果会是什么样?我们来试一下,在 Demo1 类中添加如下代码:? 1 2 3 4 5 6 7 8 9 10 11/4.创建 Demo1 类class Demo1 extends Demo / use Test1, Test2; use Test2; /在 Demo1 类中创建与 Test2 和父类 Demo 中同名的方法 hello2()public function hello2() return 'Demo1:hello()' 在浏览器再次方法,果然不出所料,子类 Demo1 中的 hello2 方法的执行结果覆盖掉了Test2 中的同名方法现在我们总结一下在同一个类中,同名方法的优先级现在我们总结一下在同一个类中,同名方法的优先级: :子类子类>Trait>Trait 类类> >父类,与就是说,父类,与就是说,谁离调用者越近,谁的优先级就越高。谁离调用者越近,谁的优先级就越高。下面我们再讨论最后一个问题:如果 trait 类中方法重名了,怎么办?如果是 trait 类中被所有类共享的方法集,重名的可能性是非常大的。下面我们修改一下代码,删除一些用不到代码:? 1 2 3 4 5 6 7 8 9 10 11/1 创建一个 trait 类 Test1trait Test1 public function hello() return 'Test1:hello()' /2.创建 triat 类 Test2trait Test2 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31function hello() return 'Test2:hello()' /3.创建类 Democlass Demo use Test1, Test2/用 Test1 中的 hello()方法替代 Test2 中的同名方法 Test1:hello insteadof Test2; /Test2 中的 hello()方法用别名访问Test2:hello as test2Hello; /这里千万不要加分号 ; 棋牌评测网 http:/www.77884.net/进行测试$obj = new Demo; echo $obj->hello(); /访问 Test1 中的 hello()echo '' echo $obj->test2Hello();/别名访问 Test2 中的 hello()

注意事项

本文(PHP5.4以后新增的trait功能使用介绍)为本站会员(m****)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。

分享当前资源【PHP5.4以后新增的trait功能使用介绍】到朋友圈,您即可以免费下载此资源!
微信扫一扫分享到朋友圈
二维码
操作提示:任选上面一个二维码,打开微信,点击“发现”使用“扫一扫”,即可将选择的网页分享到朋友圈
您可能感兴趣的------------------------------------------------------------------------------------------------------



关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.