当类中有一个方法为抽象方法,该类即为抽象类。继承一个抽象类时,应该实现其所有的抽象方法。
<?php
abstract class car{
protected $name;
protected $speed;
public function __construct($name, $speed) {
$this->name = $name;
$this->speed = $speed;
}
abstract function run();
public function __get($k) {
if(in_array($k, array(‘name‘))) {
trigger_error("禁止访问私有成员:" . $k, E_USER_ERROR);
return;
}
return $this->$k;
}
}
?>
接口定义了一系列必要的操作,实现接口的类必须实现接口的方法。
<?php
interface people
{
public function say();
}
<?php
include ‘people.interface.php‘;
class worker implements people
{
private $name;
private $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
public function say()
{
echo $this->name . ‘, age is ‘ . $age . ‘<br />‘;
}
public function __get($k)
{
if($k == ‘name‘) {
trigger_error("禁止访问私有成员:" .$k, E_USER_ERROR);
return;
}
return $this->$k;
}
}
?>
使用抽象类和接口实现契约式编程,这样可以使结构更加清晰,扩展性高。适合团队开发,例如可以通过定义一个数据库操作模型模块,使所有需要操作数据库的模块派生类都必须实现模型中的方法,这样就实现了数据层与控制层的分离,编写控制层只需要有数据层的文档即可知道基本操作。
抽象类定义基本方法,而具体的功能实现交给具体的类,当需要更换操作时,只需要重写抽象类中的基本方法。
接口是用来约束一个类型,实现面向对象编程的多态性。定义一个类型,而这个类型会派生很多的类型,但是这些类型都需要有基类的这些操作。
原文:http://www.cnblogs.com/UnixAgain/p/3800489.html