一,常用关键字。
a,final
1,不能修饰成员属性。只能修饰类和类中的方法。
2,使用final修饰的类不能被子类继承!
3,使用final修饰的类不能被子类覆盖(或重写)!
作用---------------->用来使类不被继承,方法不被覆盖!
b,static(类级别)
1,可以将类中的成员(属性,方法)标识为静态的,但不能修饰类!
2,(存储在内存的“数据段”)
3,修饰的成员属性可以被同一个类中的所有对象共享。
4,静态数据是在类第一次被加载时分配到内存中的,以后再用到类时直接从“数据段”中获取。
5,只要在程序中使用到这个类(类名出现即类被加载),那么这个类就被加载了。
注意:静态的成员(方法,属性)都要使用类名去访问,不需用(不要用)创建对象,就可以调用。
格式:类名::静态成员属性(方法)---------对象内外均为此格式!
注意:如果在类中使用或者访问静态成员,可以使用self代表本类,这样在修改了类名的时候,可以不用修改“类名”的引用!
6,静态方法(static修饰的)不能访问非静态的成员。(在非静态的方法中可以访问静态成员)因为非静态的成员必须用对象来访问,这时访问内部的成员就需要使用$this关键字。但是静态方法是直接用类名访问的,即根本没有实例化对象,不存在对象,则$this关
键字也不知道指向哪个对象,所以静态方法(static修饰的)不能访问非静态的成员。
所以,如果确定一个方法不使用非静态成员,那么可以将此方法声明为静态方法!
c,const
1,只能修饰成员属性。
2,类中声明常量使用const关键字。
3,格式为:和define一样。为----------->const IP = "192.168.1.1" ;
4,访问方式和静态成员属性一致。在类外部---------->类名::常量名。在类内部---------------->self::常量名。
5,类中的常量一定要在声明时赋值。(存储在“数据段”)
二,常用魔术方法。
a,__call();
1,在调用对象中不存在的方法时,__call()魔术方法会自动调用
2,处理一些不存在方法的错误调用。
3,这个方法需要两个参数。
function __call($methodName,$args){
}
b,__toString();
1,用来快速读取对象用字符串表示的最便捷方法。
2,直接输出对象的引用时自动调用。
3,该方法必须返回一个字符串。
c,__clone();
1,复制(克隆)对象使用clone处理---------->$p1 = clone $object。
2,__clone()是在克隆对象的时候自动调用。
3,只要一个对象一诞生,就要有初始化的动作。
4,和构造方法__construct()相似,它是为克隆出来的副本对象初始化。
5,在__clone()方法中$this关键字代表的是副本对象。($that代表原本对象。)
d,__autoload();
1,其他的魔术方法都是在类中添加起作用的,这是唯一一个不在类中添加的方法。
2,在类外部添加的方法,可以自动加载类!
3,只要在页面中使用到一个类,就会自动将类名传给__autoload(类名参数)类名参数。
对象串行化(序列化):将一个对象转为二进制串。
1,将对象长时间存储在数据库或文件时使用对象串行化。
2,将对象在多个PHP文件中传输时使用对象串行化。
serialize():参数是一个对象,返回这个对象串行化后的二进制串。------------序列化
unserialize():参数是对象的二进制串,返回来的就是原序列化之前的对象。----------------反序列化
e,__sleep();
1,在对象序列化时自动调用的方法。
2,可以将一个对象部分串行化。(只要这个方法中返回一个数组,数组中有几个成员属性,就序列化几个属性。如果不加这个方法,则所有成员都被序列化!)
f,__wakeup();
1,在对象反序列化时自动调用的方法。
2,可以将一个对象部分反串行化。(也是对象重新诞生的过程------>__construct(),__wakeup(),__clone())