Blogger Information
Blog 52
fans 0
comment 3
visits 42454
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php学习:继承、抽象类与接口
王小飞
Original
725 people have browsed it

继承

  1. class User
  2. {
  3. //公开属性
  4. public $name = '王六';
  5. public $age = 16;
  6. //受保护属性
  7. protected $shi = '2001';
  8. //私有属性
  9. private $salary = 9999;
  10. //调用方法
  11. public function write()
  12. {
  13. return "姓名: {$this->name} , 年龄: {$this->age}, 出生时间: {$this->shi}, 工资: $this->salary";
  14. }
  15. }
  16. //子类 extends继承父类所有内容
  17. class Rob extends User
  18. {
  19. }
  20. /客户端调用子类
  21. $user = new User();
  22. echo $user->write() , '<br>';

重写父类属性

  1. class User2
  2. {
  3. //公开属性
  4. public $name = '王六';
  5. public $age = 16;
  6. //受保护属性
  7. protected $shi = '2001';
  8. //私有属性
  9. private $salary = 9999;
  10. //调用方法
  11. public function write()
  12. {
  13. return "姓名: {$this->name} , 年龄: {$this->age}, 出生时间: {$this->shi}, 工资: $this->salary";
  14. }
  15. }
  16. //子类 继承父类所有内容
  17. class Rob2 extends User2
  18. {
  19. //更新属性
  20. private $salary = 29999;
  21. public function write()
  22. {
  23. return "姓名: {$this->name} , 年龄: {$this->age}, 出生时间: {$this->shi}, 工资: $this->salary";
  24. }
  25. }
  26. // 客户端调用子类
  27. $user = new Rob2();
  28. echo $user->write() , '<br>';

扩展 在子类中增加方法

  1. class Rob3 extends User3
  2. {
  3. //更新属性
  4. private $salary = 29999;
  5. //
  6. public function write0()
  7. {
  8. // 在子类中可以引用父类成员
  9. // parent::write()
  10. return parent::write() . ', 喜欢玩游戏!';
  11. }
  12. }
  13. // 客户端调用子类
  14. $user = new Rob3();
  15. echo $user->write0() , '<br>';

抽象类

  1. abstract class User4
  2. {
  3. protected $name = '胡八一';
  4. protected $age = 40;
  5. // 具体方法: 有方法体: {...},
  6. protected function write1()
  7. {
  8. return "姓名: {$this->name} , 年龄: {$this->age}";
  9. }
  10. // 抽象方法:没有方法体
  11. // 只要一个类中有一个抽象方法, 那么这个类就是:抽象类
  12. abstract protected function write2();
  13. }
  14. // 实现类/工作类: 是一个可以被实例化的普通类
  15. // 工作类不一定是可以被实例化的普通类,也可是一个抽象类
  16. // 抽象类也可以被继承, 抽象类也可以用在继承的上下文环境中
  17. // 抽象类中允许有抽象成员, 但不是强制的,也可以没有
  18. abstract class Rob4 extends User4{
  19. protected $aihao = '喜欢玩游戏!';
  20. // 必须将抽象类中的抽象方法实现
  21. protected function write2() {
  22. return parent::write1() . ", 爱好: {$this->aihao}";
  23. }
  24. }
  25. // 最终工作类: 允许实例化
  26. class Work extends Rob4
  27. {
  28. public function write2()
  29. {
  30. return parent::write2();
  31. }
  32. }
  33. // 客户端
  34. $work = new Work();
  35. echo $work->write2();

接口:分离设计与实现

  1. // 接口使用场景1: 单接口
  2. interface iUser
  3. {
  4. // 接口常量
  5. const NATION = '男';
  6. // 接口方法
  7. public static function write();
  8. // 构造方法(略)
  9. }
  10. // 工作类实现接口
  11. class User implements iUser
  12. {
  13. protected static $name = '王六';
  14. // 接口中的抽象方法,必须在工作类实现
  15. public static function write()
  16. {
  17. return self::$name . ' 的性别是: ' . iUser::NATION;
  18. }
  19. }
  20. // 客户端
  21. // 接口常量的访问与类常量一样
  22. // echo iUser::NATION;
  23. echo User::write();

总结:子类自动继承父类所有的内容,可以在子类中更新。抽象类中没有方法,可以被继承不能实例。

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:90%的父类, 其实都建议定义为抽象类
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post