1、继承的三大功能
- class ‘子类名’ extends ‘父类名’
STT | 操作 | 描述 |
---|---|---|
1 | 继承 | 父类的二类成员自动成为子类的成员 |
2 | 重写 | 覆写与父类/基类同名的成员(属性, 方法) |
3 | 扩展 | 子类添加自身的方法来增加/扩展父类的功能 |
演示代码:
<?php
// 类的继承的三个功能
class Actor
{
protected $name = '吴邪';
protected $age = 28;
private $salary = 19999;
protected static $nationality = '中国/CHINA';
public function resume()
{
return "姓名: {$this->name} , 年龄: {$this->age}, 工资: {$this->salary}";
}
}
// 类的继承的三个功能
// 继承
class Lending1 extends Actor {
// 现在该子类中什么内容也没有,可以访问父类中的成员
}
// 重写和扩展
class Lending2 extends Actor
{
// 1. 重写
// 属性重写
protected $age = 35;
// 方法重写, 方法级的多态
public function resume()
{
// 在子类中可以引用父类成员
// parent::write()
return parent::resume() . ', 是盗墓笔记的主角之一!';
}
// 2. 扩展
// 属性扩展
protected $profession = '盗墓贼';
// 方法扩展
public function resume1()
{
// return "$this->salary}"; 不能访问
return parent::resume() . ", 职业: {$this->profession}";
}
}
// 客户端
$lending1 = new Lending1;
// 访问的是父类中的成员(private也能访问)
echo $lending1->resume() . '<br>';
$lending2 = new Lending2;
echo $lending2->resume() . '<br>';
echo $lending2->resume1() . '<br>';
演示效果展示:
2、抽象类的作用与实现 abstract
抽象类关键字
只要一个类中有一个抽象方法, 那么这个类就是:抽象类
抽象类的作用: 部分分离了” 设计(抽象类中完成)与实现(工作类中完成)
演示代码:
<?php
// 类的继承的三个功能
abstract class Actor
{
protected $name = '吴邪';
protected $age = 28;
private $salary = 19999;
protected static $nationality = '中国/CHINA';
// 具体方法:有方法体: {...},
public function resume()
{
return "姓名: {$this->name} , 年龄: {$this->age}, 工资: {$this->salary}";
}
// 抽象方法:没有方法体
abstract protected function resume1();
}
// 工作类也可是一个抽象类,继承后才能调用
abstract class Lending1 extends Actor
{
protected $profession = '盗墓贼';
// 方法扩展
public function resume1()
{
// return "$this->salary}"; 不能访问
return parent::resume() . ", 职业: {$this->profession}";
}
}
class Work extends Lending1 {
}
// 客户端
$work = new Work;
echo $work->resume1() . '<br>';
演示效果展示:
3、接口基本语法
关键字:
interface
语法和类相似: 抽象方法, 常量, 构造方法
所的方法都是抽象方法
访问控制必须是public
接口: 完全分离了” 设计(抽象类中完成)与实现(工作类中完成)
接口实现关键字:implements
演示代码:
<?php
// 接口使用场景1: 单接口
interface iActor
{
// 接口常量
const NATION = '中国';
// 接口方法: 都是抽象方法
public function resume();
}
// 工作类实现接口
class Lending implements iActor
{
protected $name = '张小哥';
// 接口中的抽象方法,必须在工作类实现
public function resume()
{
return $this->name . ' 的国籍是: ' . iActor::NATION;
}
}
// 客户端
$lending = new Lending;
echo $lending->resume();
演示效果展示:
总结
初步理解继承、抽象类、接口的基础知识和简单的用法,当然离完全掌握还差很远,书读百遍,其义自现,想要真正的掌握还要多读多写。