来看看,PHP对象的高级应用怎样实现

1、final关键字

被final关键字修饰过的类和方法就是“就是最终版本”。如果一个类的格式为:

finalclassname{……}

说明该类不可以继承,也不能有子类。

如果一个方法的格式为:

finalfunctionmethodname()

说明该方法在子类中不可以进行重写,也不可以被覆盖。

本例为SportObject类设置关键字final,并生成一个子类MyBook。可以看到程序报错,无法执行。代码如下:

结果为:

Fatalerror:ClassMyBookmaynotinheritfromfinalclass(SportObject)inD:\project\collection\test\11.phponline11

2、抽象类

抽象类是一种不能被实例化的类,只能作为其它类的父类来使用。抽象类使用abstract关键字来声明,格式为:

abstractclassclass_name{}

抽象类和普通类相似,包含成员变量、成员方法。两者的区别在于,抽象类至少要包含一种抽象方法。抽象方法没有方法体,其功能的实现在子类中完成。抽象方法也是使用abstract关键字来修饰的,格式如下:

abstractfunctionname();

下面实现一个商品抽象类CommodityObject,该抽象类包含一个抽象方法service()。生成两个子类MyBook和MyComputer,分别在两个子类中实现抽象方法。最后实例化两个对象,调用实现后的方法,输出结果。代码如下:

运行结果如下图所示:

3、接口的使用

集成特性简化了对象、类的创建,增加了代码的可重性。单PHP只支持单继承。如需要实现多继承,就需使用接口。

接口类通过interface关键字来声明,并且类中只能包含未实现的方法和一些成员变量,格式如下:

interfaceinterfaceName{functionname1();functionname2();}

注意:不要用public以外的关键字来修饰接口中的类成员,对于方法,不写关键字也可以。这是由接口类自身的属性决定的。

子类是通过implements关键字来实现接口的,如要实现多个接口,可在每个接口之间使用逗号“,”隔开。而且接口类中所有未实现的方法在子类中全部实现,否则PHP会报错。

首先声明了两个接口MPopedom和MPurview,接着声明了两个类Member和Manager,其中Member类继承了MPopedom接口;Manager继承了MPopedom和MPurview接口。分别实现各自成员方法后,实例化两个对象,调用实现后的方法。代码:

运行结果图

通过上面的实例可以发现,抽象类和接口实现的功能十分相似。抽象类的优点是可以在类中实现公共方法,而接口则可以实现多继承。

4、魔术方法

(1)__set()和__get()方法

这两个魔术方法的作用分别为:

当程序试图写入一个不存在或不可见的成员变量时,PHP就会执行__set()方法。__set()方法包含两个参数,分别表示变量名和变量值,两个参数不可省略。

当程序调用一个未定义或是不可见的成员变量时,可以通过__get()方法来读取变量的值。__get()方法有一个参数,表示要调用的变量名。

(2)__call()方法

__call()方法的作用是:当程序试图调用不存在或不可见的成员方法时,PHP会先调用__call()方法来存储方法名及其参数。__call()方法包含两个参数,即方法名和方法参数。其中,方法参数是以数组形式存在的。

代码结果图

总结,PHP安全问题有哪些

phpsession会话使用案例




转载请注明:http://www.aierlanlan.com/rzfs/2329.html

  • 上一篇文章:
  •   
  • 下一篇文章: