PHP5 面向对象
1
Created by 刀客羽朋
第四章 PHP5 接口与多态
PHP5 面向对象
2
Created by 刀客羽朋
目录
4.1 接口的定义与规范............................................................................................................3
4.1.1 接口的定义.............................................................................................................3
4.1.2 接口中的抽象方法.................................................................................................5
4.2.3 接口中抽象方法的修饰和访问权限.....................................................................5
4.1.4 接口中的静态抽象方法.........................................................................................8
4.1.5 接口中的静态常量.................................................................................................8
4.2 实现接口..........................................................................................................................10
4.2.1 使用implements实现接口 ....................................................................................10
4.2.2 实现多个接口.......................................................................................................12
4.2.3 继承并实现接口...................................................................................................13
4.3 接口的继承......................................................................................................................14
4.3.1 接口实现继承.......................................................................................................14
4.3.2 接口可以实现多继承...........................................................................................15
4.4 抽象类实现接口..............................................................................................................16
4.5 类型提示..........................................................................................................................17
4.5.1 没有类型提示很危险...........................................................................................17
4.5.2 原始类型的类型判断...........................................................................................18
4.5.3 向方法内传递对象...............................................................................................19
4.5.4 类型提示保障数据安全.......................................................................................21
4.6 PHP5 中的多态 .............................................................................................................22
4.6.1 通过实现接口实现多态.......................................................................................22
4.6.2 通过继承关系实现多态.......................................................................................23
4.7 instanceof运算符 ..............................................................................................................24
4.7.1 instanceof运算符的运用 .......................................................................................24
4.7.2 使用instatnceof运算符保障代码安全 ..................................................................25
4.8 使用接口与组合模拟多继承..........................................................................................26
4.8.1 通过组合模拟多重继承.......................................................................................26
4.8.2 不完全的多重继承...............................................................................................27
4.8.3 使用接口实现多重继承........................................................................................28
4.9 接口实例..........................................................................................................................29
4.10 简单工厂模式................................................................................................................32
小结.........................................................................................................................................37
PHP5 面向对象
3
Created by 刀客羽朋
4.1 接口的定义与规范
z 接口(interface)是抽象方法和静态常量定义的集合。
z 接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和静态常量。
z 接口中没有其它类型的内容。
4.1.1 接口的定义
我们先写接口的定义,后面几节再介绍接口的意义。
下面的例子是接口的一个简单写法。
interface 接口名{
}
下面的例子定义了一个接口 User ,这个接口中有两个抽象方法,getName() 和
setName()。能看到接口的写法和类很相似。
例:4-1-1.php
PHP5 面向对象
4
Created by 刀客羽朋
PHP5 面向对象
4.1.2 接口中的抽象方法
注意,在接口中只能有抽象方法。如果在接口中出现了非抽象方法,会报错如下:
Interface function User::setName() cannot contain body in ……….
例 4-1-2.php
这里只能是抽象方法
4.2.3 接口中抽象方法的修饰和访问权限
在接口中的抽象方法只能是 public 的,默认也是 public 权限。
并且不能设置成 private 或者 protected 类型。
否则会报错如下:
Access type for interface method User::setName() must be omitted in
—on line —
(在接口中,访问类型必须忽略。)
例:4-1-3.php
5
Created by 刀客羽朋