分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

php使用trait遇到的一个问题

发布时间:2023-09-06 01:48责任编辑:苏小强关键词:暂无标签

php是单继承语言,也是就是一个类只能继承一个单独的原始类
自PHP5.4.0起,PHP实现了一种代码复用的方法,称为Trait
trait 是在一些类(Class)的应该具备的特定的属性或方法,而同父级的另外一些类应该避免包含这些属性和方法情况下使用的.

类成员优先级为:当前类>Trait>父类

 1 trait funcA { 2 ????????????// 二、 3 ????????????// trait关键字的使用和类定义一样 4 ????????????// 也是可以定义方法和属性的 5 ????????????public function a () { 6 ????????????????echo "hello "; 7 ????????????} 8 ????????????public function b () { 9 ????????????????echo "word ";10 ????????????}11 ????????????public function mm () {12 ????????????????echo "mmp";13 ????????????}14 ????????????public function c () {15 ????????????????$this->a();16 ????????????????$this->b();17 ????????????}18 ????????}19 ????????class A {20 ????????????// 在类A中使用use关键字,可以实现复用func里面的方法和属性(变相的继承了func中的属性和方法)21 ????????????use funcA;22 ????????}23 ????????$a = new A();24 ????????$a->c();

上面这段代码,最终输出结果为hello hello word

经过断点调试,发现在实例化对象的时候,上述代码中的 a方法被执行了(难道是巧合?换个姿势在测试一次)

 1 trait funcA { 2 ????????????// 二、 3 ????????????// trait关键字的使用和类定义一样 4 ????????????// 也是可以定义方法和属性的 5 ????????????public function a () { 6 ????????????????echo "hello"; 7 ????????????} 8 ????????????public function b () { 9 ????????????????echo "word";10 ????????????}11 ????????????public function c () {12 ????????????????$this->a();13 ????????????????$this->b();14 ????????????}15 ????????}16 ????????class B {17 ????????????// 在类A中使用use关键字,可以实现复用func里面的方法和属性(变相的继承了func中的属性和方法)18 ????????????use funcA;19 ????????}20 ????????$a = new B();21 ????????// $a->c();

按道理来说应该什么也不输出的,不巧的是,在实例化的时候trait中的b方法还是被执行了(那我们再换个姿势来测试一下?)

trait funcA { ???????????// 二、 ???????????// trait关键字的使用和类定义一样 ???????????// 也是可以定义方法和属性的 ???????????public function test1 () { ???????????????echo "hello"; ???????????} ???????????public function test2 () { ???????????????echo "word"; ???????????} ???????????public function c () { ???????????????$this->test1(); ???????????????$this->test2(); ???????????} ???????} ???????class A { ???????????// 在类A中使用use关键字,可以实现复用func里面的方法和属性(变相的继承了func中的属性和方法) ???????????use funcA; ???????} ???????$a = new A();

按照我们之前的推断,这次应该不会再输出什么了吧!!对的没错,这次是按照我们的预期来得,所以上述原因是为什么呢?我也不晓得?待大神来答疑解惑。。。。。

php使用trait遇到的一个问题

原文地址:https://www.cnblogs.com/songdongdong/p/8777522.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved