一、抽象类与抽象方法
1,任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
2,定义为抽象的类不能被实例化。
3, 被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
4,必须在子类中将抽象类的全部抽象方法全部实现才可以
<?php // 任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。 abstract class Person // 定义为抽象的类不能被实例化。 { public $name;
public function __construct($name) { $this->name = $name; }
// 被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。 abstract protected function hello();
abstract protected function say();
public function show() { return "我的名字:".$this->name; } }
class Worker extends Person { // 必须在子类中将抽象类的全部抽象方法全部实现才可以 public function hello() { return 'Hello '.$this->name; }
public function say() { return 'Say '.$this->name; }
}
$worder = new Worker('小明'); echo $worder->hello(); // Hello 小明 echo '<hr>'; echo $worder->say(); // Say 小明 echo '<hr>'; echo $worder->show(); // 我的名字:小明 ?>
二、接口的实现
使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
接口中定义的属性是类常量,定义的所有方法都必须是公有的抽象方法,所以public 、abstract 可不写,这是接口的特性。
<?php interface Person1 { // 接口中定义的属性必须是:类常量 const SITENAME = '我在学习PHP'; // 接口中定义的所有方法都必须是公有的抽象方法,所以public 、abstract 可不写 function show(); function do(); }
interface Person2 { function hello(); }
// 接口不允许实例化,但可以被继承,创建一个类继承接口并实现所有的抽象方法 class Worker implements Person1,Person2 { public function show() { return self::SITENAME; } public function do() { return '我在写代码~~'; } public function hello() { return 'PHP是非常好的一种语言~~'; } }
$worker = new Worker(); echo $worker->show(); // 我在学习PHP echo '<hr>'; echo $worker->do(); // 我在写代码~~ echo '<hr>'; echo $worker->hello(); // PHP是非常好的一种语言~~ ?>