PHP的接口与抽象类

PHP的接口:为了实现特定功能而预留的类似类的一种类型。接口的主要目的:提供给类类似于模板的框架,以方便类的构建。

在PHP中定义接口

PHP中定义接口的形式如下:

Interface interfaceName

{

Const 1;

……

Const 2;

Function methodName1();

……

Function methodName2();

}

PHP中单一接口的实现

实现接口的语法如下:

Class class_name implements interface_name

例如:

<?php

interface staff_i1 //接口1

{

function setID();

function getID();

}

interface staff_i2 //接口2

{

function setName();

function getName();

}

class staff implements staff_i1,staff_i2

{

private $id;

private $name;

function setID($id)

{

$this->id = $id;

}

function getID()

{

return $this->id;

}

function setName($name)

{

$this->name = $name;

}

function getName()

{

return $this->name;

}

function otherFunc() //这是一个接口中不存在的方法

{

echo “Test”;

}

}

?>

PHP中多重接口的实现

PHP的实际编程中,有时根据需要需设计多个接口,在实现的时候根据实际情况选择不同的一组来实现,这时需要使用一个类来实现两个或两个以上的接口。

例如:

<?php

interface staff_i1 //接口1

{

function setID();

function getID();

}

interface staff_i2 //接口2

{

function setName();

function getName();

}

class staff implements staff_i1,staff_i2

{

private $id;

private $name;

function setID($id)

{

$this->id = $id;

}

function getID()

{

return $this->id;

}

function setName($name)

{

$this->name = $name;

}

function getName()

{

return $this->name;

}

function otherFunc() //这是一个接口中不存在的方法

{

echo “Test”;

}

}

?>

PHP中的抽象类

抽象类的定义:

Abstract class class_name

PHP中抽象类与一般类的区别在于:抽象类不能用于创建对象,只能用于继承。

例如:

<?php

interface staff_i1 //接口1

{

function setID();

function getID();

}

interface staff_i2 //接口2

{

function setName();

function getName();

}

class staff implements staff_i1,staff_i2

{

private $id;

private $name;

function setID($id)

{

$this->id = $id;

}

function getID()

{

return $this->id;

}

function setName($name)

{

$this->name = $name;

}

function getName()

{

return $this->name;

}

}

class manager extends staff

{

function is_manager()

{

return TRUE;

}

}

?>

PHP中接口与抽象类的区别:

  • 接口的使用方式通过implements关键字进行;抽象类则是通过继承extends关键字进行
  • 接口可同时实现多个接口;对抽象类的继承只能继承一个抽象类
  • 接口中不可以有函数的实现代码;抽象类中可有。