继承的三大功能演示
<?php
// 类的继承
// 父类: 基类
class User
{
protected $name = '卫斯理';
protected $age = 45;
private $salary = 1;
protected static $nationality = '中国/香港';
public function write()
{
return "姓名: {$this->name} , 年龄: {$this->age}";
}
}
// 子类对父类的三种操作: 继承, 重写, 扩展
// 1. 继承: 父类的二类成员自动成为子类的成员
// 2. 重写: 覆写与父类/基类同名的成员(属性, 方法)
// 3. 扩展: 子类添加自身的方法来增加/扩展父类的功能
class Rob extends User
{
// 1. 重写父类成员
// 属性重写
protected $age = 55;
// 方法重写, 方法级的多态
public function write()
{
// 在子类中可以引用父类成员
// parent::write()
return parent::write() . ', 是一个不可思议事件的探索者~~';
}
// 2. 扩展
// 属性扩展
protected $profession = '未知探索者';
// 方法扩展
public function write1()
{
return parent::write() . ", 职业: {$this->profession}";
}
}
// 客户端
$user = new User;
echo $user->write() . '<br>';
$rob = new Rob;
echo $rob->write() . '<br>';
echo $rob->write1() . '<br>';
演示效果
抽象类的演示
<?php
// 抽象类的作用与实现
// 抽象类: 部分分离了" 设计(抽象类中完成)与实现(工作类中完成)"
abstract class User
{
protected $name = '王胖子';
protected $age = 40;
// 类方法
protected function output()
{
return "姓名: {$this->name} , 年龄: {$this->age}";
}
// 抽象方法:没有方法体,类方法是抽象类的,称为抽象类
abstract protected function output1();
}
// 工作了实现例,也可是一个抽象类
abstract class Rob extends User{
protected $profession = '摸金校尉助手';
// 必须将抽象类中的抽象方法实现
protected function output1() {
return parent::output() . ", 职业: {$this->profession}";
}
}
// 客户端
// 抽象类不能被实例化,最终工作类: 允许实例化
class Work extends Rob
{
public function output1()
{
return parent::output1();
}
}
$work = new Work();
echo $work->output1();
演示效果
【实例】接口的基本语法
<?php
// 接口: 完成分离了"设计与实现"
// 关键字: interface
// 使用与类相似的语法: 抽象方法, 常量, 构造方法(魔术方法的一种)
// 默认访问控制必须是public
// 接口允许多继承, 从而间接实现了PHP的多继承
// implements
// 接口的基本语法 -->单接口
interface iUser
{
// 接口常量
const Nation = '中国';
// 接口方法(抽象方法)
public static function output();
}
// 工作类实现接口
class User implements iUser
{
// 类变量
protected static $name = '王胖子';
// 接口中的抽象方法,必须在工作类实现
public static function output()
{
return self::$name . '的国籍是'. iUser::Nation;
}
}
// 客户端
echo User::output();
演示效果
总结:
1.PHP面向对象的三大特征是封装、继承、多态。
子类对父类(基类)的三种操作:继承(系统自动完成)、重写、扩展。
2.抽象类的演示中,不知哪里有问题,总是没有结果显示,每条语句都对照过,查不出问题,最后没办法,只能另起文件再做一次就没问题了。我估计是搜狗输入法和这个VSC编辑器配合的问题。
3.单接口的语法:常量、抽象方法
关键词:interface
实现接口的关键词:implement