参考在线文档,整理php中类的相关概念以下
$this 在类的内部可使用伪变量$this,这个伪变量为一个到主叫对象(经我的测试理解这应该是在运行时的真实对象,不是类,运行时绑定)的引用,因此一个类中使用$this,在运行时,这个$this指代的多是该类的对象,也多是该来的子类对象,也多是其余对象,
参考例子
继承 php中不支持多继承,一个类只能继承一个基类,被继承的方法和属性能够用一样的名字从新声明覆盖,父类中定义的常属性和常方法不能被覆盖,能够经过parent来访问被覆盖的属性或方法
属性 类的属性初始化的值必须是常数(php脚本在编译阶段就能够获得的值,不依赖运行时的环境。好比字符串,整数,数组),属性有静态属性和非静态属性,非静态属性可使用->访问,也可使用::访问,静态属性只能经过::访问
类常量 定义和使用类常量的时候不须要使用$,类常量不能用访问控制符修饰,类常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用。使用::访问类常量,不须要实例化对象也能够访问类常量,类常量也算一个特殊的静态属性
构造函数与析构函数 php中的这两个函数,一个是在对象被建立的时候被执行,一个是在某个对象的全部引用都被删除或对象被显式销毁时执行。要注意的就是在继承中,子类的构造函数在参数上能够和父类不一样;其次就是若是子类没有定义构造函数或析构函数,会继承父类的;子类若是定义了,父类的构造函数就不会被隐式调用,除非在子类的构造函数中显示调用父类构造函数
访问控制(可见性) 类的属性和方法的访问控制有3种,public,protected,private。被定义为public的能够在任何地方被访问,被定义成protected的只能被其自身或子类或父类访问,被定义为private的只能被其自身访问
范围解析操做符(::) self,parent,static这三个特殊关键词能够用在类的内部对其属性或方法进行访问
static 声明类的属性或方法为静态,就能够不实例化类直接访问,静态属性不能经过实例化的对象访问,静态方法能够经过实例化的对象访问
对象接口 接口中定义的全部方法必须是共有的,这是接口特性
trait 解决php中单继承的一种代码复用机制,组合功能
对象遍历 默认状况下,用foreach对类对象进行遍历,类的public属性都会被遍历到。进一步,可让类实现Iterator接口(实现rewind,current,key,next,valid方法)让类决定如何遍历。也能够实现IteratorAggregate接口(实现getIterator方法,这个方法返回一个实现了Iterator或Traversable接口的类)来自定义遍历
final(常类,常方法) php5后新增的,类中方法被声明为final,子类没法覆盖,类被声明为final,不能被继承
clone php中,对象变量存储的是对象的标识,对象变量赋值给其余变量,只是将标识复制给了其余变量,对象不会新增。修改一个对象变量的属性会影响到其余指向相同对象的变量,若是采用clone,会新增一个新的对象,新对象内部的属性若是是仍旧是对象,须要实现模式方法__clone(),进行内部属性克隆
对象比较 比较原则,使用==,两个对象是同一个类实例,属性和属性值都相等,相等。使用===,两个对象变量指向某个类的同一个实例,相等
类型约束 php5以后,能够在函数的参数上使用类型约束,类型约束不能用于标量类型,好比int,string,trait也不行
后期静态绑定 self或者__CLASS__是对当前类的静态引用,取决于定义当前方法所在的类。static再也不被解析为定义当前方法所在的类,而是实际运行时计算的
对象和引用 php5以后,一个对象变量再也不保存这个对象的值,只是保留一个对象的标识,用于访问真正的对象内容。当对象做为参数,函数返回,赋值(不是clone)给其余变量,另一个变量一样也是保存同一个标识的拷贝,这个标识能够指到正真内容
对象序列化 序列化方法serialize(),钩子__sleep()。反序列化方法unserialize(),钩子__wakeup()