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遇到的一个问题的更多相关文章

  1. php中trait(性状)与generator(生成器)

    PHP中trait(性状)与generator(生成器) 一.trait (性状) 最近在看Josh Lockhat的<Modern PHP>,这本书很薄.但是其中给出了一个很重要的学习方 ...

  2. Scala Trait

    Scala Trait 大多数的时候,Scala中的trait有点类似于Java中的interface.正如同java中的class可以implement多个interface,scala中的cals ...

  3. PHP中的Trait

    Trait 自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait. Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制.Trait 为了减少单继承语言的限制, ...

  4. trait与policy模板技术

    trait与policy模板技术 我们知道,类有属性(即数据)和操作两个方面.同样模板也有自己的属性(特别是模板参数类型的一些具体特征,即trait)和算法策略(policy,即模板内部的操作逻辑). ...

  5. php中trait

    1.简介 自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait. Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制.Trait 为了减少单继承语言的限制,使 ...

  6. trait

    参考 引文 在php中,为实现代码复用,有了继承,但是一个类只能继承一个父类,不支持多继承,接口支持多实现,但是接口又不太一样,接口对外负责功能调用声明,不负责实现,由实现了接口的类去实现具体功能逻辑 ...

  7. Scala学习教程笔记二之函数式编程、Object对象、伴生对象、继承、Trait、

    1:Scala之函数式编程学习笔记: :Scala函数式编程学习: 1.1:Scala定义一个简单的类,包含field以及方法,创建类的对象,并且调用其方法: class User { private ...

  8. C++ template —— trait与policy类(七)

    第15章 trait与policy类---------------------------------------------------------------------------------- ...

  9. Trait 是什么东西

    PHP官方手册里面写的内容是 自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait. Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制.Trait 为了减少 ...

随机推荐

  1. iOS 计算字符串显示宽高度

    ObjC(Category of NSString): - (CGSize)getSizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size{ ...

  2. Qt事件系统之四:定时器事件与随机数

    一.定时器事件和随机数 QTimerEvent类用来描述一个定时器事件.对于一个QObject的子类,只需要使用int QObject::startTimer ( int interval)函数来开启 ...

  3. [Usaco2011 Feb]Generic Cow Protests

    Description Farmer John's N (1 <= N <= 100,000) cows are lined up in a row and numbered 1..N. ...

  4. magento 获得当前产品页面的产品id

    $product_id = Mage::registry('current_product')->getId();

  5. DotNteBar 控件操作

    DotNteBar中ComboBoxEx.DroppedDown = true可以不点击该控件就显示其内容.将DropDownStyle属性设为DropDownList下拉框就不能进行编辑只能选择下拉 ...

  6. border-1px的实现(stylus)

    当样式像素一定时,因手机有320px,640px等.各自的缩放比差异,所以设备显示像素就会有1Npx,2Npx.为保设计稿还原度,解决就是用media + scale. // stylus语法 bor ...

  7. Java数据类型和MySql数据类型对应一览 [转]

    类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lang.String 12   CHAR N ...

  8. Mac 为啥不显示图片尺寸,点了显示简介也不显示~???

    这个问题困扰我好几天,然后今天想法子解决,我这个强迫症患者是真的难受,不能直接一目了然的,每次都要ps打开图片去看,真的好心累???? 网上98%的解决方法如下: 在 Finder 中,按快捷键 co ...

  9. e.Row.RowType == DataControlRowType.DataRow详解(转)

    代码语句如下: protected void OnRowCreate(object sender, GridViewRowEventArgs e)    {        if (e.Row.RowT ...

  10. java中字节和字符的转换操作

    package com.ywx.io; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputSt ...