1.抽象类
abstract: 定义抽象方法/抽象类
类中只要有一个抽象方法, 该类就应该声明为抽象类
抽象类只能被继承,不能实例化,并且抽象方法必须在子类实现
实现抽象方法的子类方法可见性不能低于抽象方法原定义
抽象方法是public, 子类方法只能是public
抽象方法是protected, 子类方法只能是protected/public
<?php
abstract class Person{
//属性成员
protected $name = null;
//构造函数
protected function __construct($name = 'Jason')
{
$this->name = $name;
}
//外部访问获取name
public function getName(){
return $this->name;
}
abstract protected function setName($name);
}
class Girl extends Person{
public function __construct($name = 'Jason')
{
parent::__construct($name);
}
//必须实现抽象类函数
function setName($name)
{
$this->name = $name;
}
}
/********实例化对象*********/
$girl = new Girl('Alice');
echo '名字:'.$girl->getName() .'<hr>';
$girl->setName('Maria');
echo '更改后名字:'.$girl->getName() .'<hr>';
2.接口
interface: 指定某个类必须实现的方法,但不需要定义方法的具体实现过程
接口中仅允许出现: 方法与类常量
接口的方法可见性必须是: public
接口的方法体必须是空的
接口是类的代码模板, 可以像类一样有父子继承关系,例如父接口, 子接口
implements: 类实现接口的关键字, 读音: ['ɪmplɪmɛnts,应波罗曼次]
如果仅是部分实现接口中的方法, 请用一个抽象类来实现它
<?php
/****************************/
/***********接口*************/
/****************************/
interface iVehicle{
public function setFuel($fuel);
public function setPurpose($purpose);
}
class Car implements iVehicle{
public $fuel;
public $purpose;
public function setFuel($fuel)
{
$this->fuel = $fuel;
}
public function setPurpose($purpose)
{
$this->purpose = $purpose;
}
public function log(){
return $this->fuel . $this->purpose . '车<hr>';
}
}
class Auto implements iVehicle{
public $fuel;
public $purpose;
//必须实现接口方法
public function setFuel($fuel){
$this->fuel = $fuel;
}
public function setPurpose($purpose){
$this->purpose = $purpose;
}
public function log(){
return $this->fuel . $this->purpose . '车 <hr>';
}
}
/***********实例化接口*************/
$car = new Car();
$car->setFuel('新能源');
$car->setPurpose('公交');
echo $car->log();
$car = new Auto();
$car->setFuel('家用');
$car->setPurpose('燃油');
echo $car->log();
运行效果
手写代码
总结
在实际开发过程中, 通常并不会直接使用一个父类/超类,而是在父类中定义一些方法声明
并且确信这个方法肯定是会被子类重写的, 父类中没必要实现,只要给一个方法编写规范即可
这个规范包括方法的名称, 参数列表等,具体实现就完全交给子类去完成了
相当于公司的部门主管, 接受到老板的任务, 只把属于自己的部分做了, 其它部分, 设置一个标准交给下属去完成