面对对象

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__

原文地址:https://www.cnblogs.com/maidongdong/p/11416539.html