1、类里面有三种成员:属性(普通属性,静态属性),方法(普通方法,静态方法,魔术方法(
__construct,__destruct,__set,__get,__isset,__unset,_call,__callStatic,__sleep,__wakeup,__clone
)),常量(访问权限为public),属性和方法可以加访问权限修饰符(public,protected,private)
2、魔术方法:
1、__construct()构造方法,创建对象时调用, __destruct()析构方法,对象被销毁(unset)或页面运行完毕时调用
2、属性重载器:__set,在类外部给一个不可访问属性如private,protected或者没有的属性赋值时,会调用, __get, __isset,在类外对一个不可访问属性使用isset方法时调用, __unset,在类外对一个不可访问属性使用unset方法时调用
3、方法重载器:__call,在类外部调用一个不可访问方法时调用,__callStatic,在类外部用静态方式访问一个不可访问方法时调用
类里面的静态方法里不能用$this
3、子类调用父类,$this或静态调用(Parent::$fun)
4、后期静态绑定,在父类中static::,父类想访问子类成员(属性、方法、常量)
5、类是单继承的,一个类可以实现(implements)多个接口;接口可以继承多个接口(接口拆分)
6、接口是一种规范,与第三方合作的说明书。如果一个类实现了一个接口,那么这个类的实例就属于接口类型,class s implements p;$s = new s;检测$s instanceof p === true;
7、抽象类里可以有具体方法,抽象类的常量在子类中可以修改,抽象类不能实例化
8、自动加载(类,接口,命名空间):spl_autoload_register,get_include_path,set_include_path,PATH_SEPARATOR(windows下是‘;’,linux下是‘:’)
9、序列化(serialize,__sleep控制哪些属性序列化)与反序列化(unserialize,__wakeup准备其他资源,连接数据库)
10、对象复制,clone浅复制(只复制表面一层,若里面属性的值含有如对象,修改复制的对象里面的值,则会影响原有对象),深复制(克隆的两个对象完全脱离关系),使用__clone,在方法里clone,在类外部调用clone时,会触发__clone();
11、trait,不能实例化,里面不能有常量,使用方法use traitName,调用优先级本类>trait>父类;trait里可以有抽象方法,使用时要实现
12、final类不能被继承,final方法不能部覆盖
13、$obj instanceof $class,检测对象是否属于某一个类或父类
14、对象的遍历,直接用foreach
15、对象的比较 $obj1==$obj2返回true,则是同一个类的实例
16、命名空间成员:接口,类,函数,常量,变量
17、__METHOD__,__CLASS__,__NAMESPACE__