PHP5面向对象之接口技术详解

PHP 5也支持接口的概念,并为之引入了interface和implements关键字.和Java一样,PHP 5使用接口也实现类似于“多重继承”的效果.

PHP5接口语法如下:

声明一个类的时候我们使用的关键字是”class”,而接口一种特殊的类,使用的关键字是“interface”;

类的定义:class 类名{ … },接口的声明:interface 接口名{ …}

具体PHP5抽象类的代码如下:

实例代码如下:

  1. abstract class AbstractClass {
  2. abstract public function test();
  3. }
  4. class ImplementedClass extends AbstractClass {
  5. public function test() {
  6. echo "ImplementedClass::test() called. ";
  7. }
  8. }
  9. $o = new ImplementedClass;
  10. $o->test();

实例代码如下:

  1. interface displayable {
  2. function display();
  3. }
  4. interface printable {
  5. function doprint();
  6. }
  7. class foo implements displayable,printable {
  8. function display() {
  9. // code
  10. } function doprint() {
  11. // code
  12. }
  13. }

抽象类和PHP5接口的引入使PHP成了一个完全面向对象的语

//定义一个接口使用interface关键字,“One”为接口名称

实例代码如下:

  1. interface One
  2. {
  3. //定义一个常量
  4. const constant = 'constant value';
  5. //定义了一个抽象方法”fun1”
  6. public function fun1();
  7. //定义了抽象方法”fun2”
  8. public function fun2();
  9. }

上例中定义了一个接口”one”,里面声明了两个抽象方法“fun1”和”fun2”,因为接口里面所有的方法都是抽象方法,所以在声明抽象方法的时候就不用像抽象类那样使用”abstract”这个关键字了,默认的已经加上这个关键字,另外在接口里边的”public”这个访问权限也可以去掉,因为默认就是public的,因为接口里所有成员都要是公有的,所在对于接口里面的成员我们就不能使用“private”的和”protected”的权限了,都要用public或是默认的.另外在接口里面我们也声明了一个常量“constant“, 因为在接口里面不能用变量成员,所以我们要使用const这个关键字声明.

因为接口是一种特殊的抽象类,里面所有的方法都是抽象方法,所以接口也不能产生实例对象; 它也做为一种规范,所有抽象方法需要子类去实现.

我们可以使用”extends”关键字让一个接口去继承另一个接口;

实例代码如下:

  1. //使用”extends”继承另外一个接口
  2. interface Two extends One
  3. {
  4. function fun3();
  5. function fun4();
  6. }

而我们定义一接口的子类去实现接口中全部抽象方法使用的关键字是”implements”,而不是我们前面所说的”extends”;

//使用“implements”这个关键字去实现接口中的抽象方法

实例代码如下:

  1. class Three implements One
  2. {
  3. function fun1()
  4. {
  5. … …
  6. }
  7. function fun2()
  8. {
  9. … …
  10. }
  11. }
  12. //实现了全部方法,我们去可以使用子类去实例化对象了

实例代码如下:

  1. $three=new Three();

我们也可以使用抽象类,去实现接口中的部分抽象方法,但要想实例化对象,这个抽象类还要有子类把它所有的抽象方法都实现才行;

在前面我们说过,PHP是单继承的,一个类只能有一父类,但是一个类可以实现多个接口,就相当于一个类要遵守多个规范,就像我们不仅要遵守国家的法律,如果是在学校的话,还要遵守学校的校规一样;

实例代码如下:

  1. //使用implements实现多个接口
  2. class Four implemtns 接口一,接口二,……
  3. {
  4. //必须把所有接口中的方法都要实现才可以实例化对象.
  5. }

PHP中不仅一个类可以实现多个接口,也可以在继承一个类的同时实现多个接口,一定要先继承类再去实现接口;

实例代码如下:

  1. //使用extends继承一个类,使用implements实现多个接口
  2. class Four extends 类名一 implemtns 接口一,接口二,……
  3. {
  4. //所有接口中的方法都要实现才可以实例化对象
  5. ………
  6. }

讲了这么多最后看看一个实例

VideoCard.php 接口文件(显卡的功能接口定义)

实例代码如下:

  1. <?php
  2. interface VideoCardInter{
  3. function Display();
  4. function getName();
  5. }
  6. ?>

Dmeng.php 实现接口(帝盟的厂家实现了这些接口,怎么实现的,主板厂家不用管)

实例代码如下:

  1. <?php
  2. include_once("VideoCard.php");
  3. class Dmeng implements VideoCardInter {
  4. function Display(){
  5. echo "Display";
  6. }
  7. function getName(){
  8. return "Dmeng VideoCard";
  9. }
  10. }
  11. ?>

Mainboard.php 应用接口(把显卡插到主板上,主板只要用这些接口就行了,也可以不用)

实例代码如下:

  1. <?php
  2. include_once("VideoCard.php");
  3. include_once("Dmeng.php");
  4. class Mainboard{
  5. var $vc;
  6. function run(VideoCardInter $vc){ //定义VideoCardInter接口类型参数,这时并不知道是谁来实现.
  7. $this->vc=$vc;
  8. $this->vc->Display();
  9. echo "主板运行!";
  10. }
  11. }
  12. $conputer=new Mainboard();
  13. $conputer->run(new Dmeng);
  14. //用的时候把实现接口类的名称写进来,(现在是帝盟的显卡,也可以换成别的场家的,只要他们都实现了接口)
  15. ?>

上面是转自的,然后自己试着写了点东西:把自己的思想总结一下

这里我想是分成4个方面

1,静态链接数据库类(基本的链接数据库,查询记录数,返回结果集等等)

2,每个模块的接口(例如新闻类接口 NewsInterface)

3,实现接口的类(新闻实现类 NewsInterfaceImpl 这里面写一些页面中用到的方法,然后new这个对象 调用这里么的方法)

4,模块类(新闻类 News)