Blogger Information
Blog 11
fans 0
comment 0
visits 7547
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php继承的三大功能,抽象与接口
老陈
Original
625 people have browsed it

1.继承三大功能(继承,重写,扩展)

1.1继承 :父类的二类成员自动成为子类的成员

二类成员: 子类有权访问的父类成员类型, public,protected
通过 extends关键字继承父类
  1. //父类
  2. class Father{
  3. //公开属性
  4. public $name = '张三';
  5. public $age = 40;
  6. //受保护属性
  7. protected $like = '摄影';
  8. //私有属性
  9. private $money = 12000;
  10. //公开方法
  11. public function fat1(){
  12. return "姓名:{$this->name}<br>年龄:{$this->age}<br>爱好:{$this->like}";
  13. }
  14. public function fat2(){
  15. return "姓名:{$this->name}<br>年龄:{$this->age}<br>爱好:{$this->like}<br>工资:{$this->money}";
  16. }
  17. }
  18. //Body子类 继承(extends) Father父类
  19. class Body extends Father {
  20. }
  21. $father = new Father();
  22. echo $father->fat1();
  23. echo '<hr>';
  24. $body = new Body();
  25. //通过子类在外部访问父类中的公开属性
  26. echo $body->name;
  27. echo $body->age;
  28. echo '<hr>';
  29. //通过子类访问父类中的公开方法
  30. echo $body->fat1();
  31. echo '<hr>';
  32. echo $body->fat2();

1.2重写:重写与父类同名的(属性, 方法)

  1. class Father{
  2. public $name = '张三';
  3. public $age = 40;
  4. protected $like = '摄影';
  5. private $money = 12000;
  6. public function fat1(){
  7. return "姓名:{$this->name}<br>年龄:{$this->age}<br>爱好:{$this->like}";
  8. }
  9. public function fat2(){
  10. return "姓名:{$this->name}<br>年龄:{$this->age}<br>爱好:{$this->like}<br>工资:{$this->money}";
  11. }
  12. }
  13. class Body extends Father {
  14. //重写父类属性
  15. protected $like = '钓鱼';
  16. //重写父类方法
  17. public function fat1(){
  18. return parent::fat1().'<br>最近又喜欢上钓鱼了~~!';
  19. }
  20. public function fat2(){
  21. //重写父类方法不能调用父类的私有属性
  22. return "姓名:{$this->name}<br>年龄:{$this->age}<br>爱好:{$this->like}<br>工资:{$this->money}";
  23. }
  24. }
  25. $father = new Father();
  26. echo $father->fat2();
  27. echo '<hr>';
  28. $body = new Body();
  29. //访问子类重写方法
  30. echo $body->fat1();
  31. echo '<hr>';
  32. echo $body->fat2();

1.3 扩展: 子类添加自身的方法来增加/扩展父类的功能

  1. class Father{
  2. public $name = '张三';
  3. public $age = 40;
  4. protected $like = '摄影';
  5. private $money = 12000;
  6. public function fat1(){
  7. return "姓名:{$this->name}<br>年龄:{$this->age}<br>爱好:{$this->like}";
  8. }
  9. }
  10. class Body extends Father {
  11. //扩展属性
  12. protected $profession = '医生';
  13. //重写父类方法
  14. public function fat1(){
  15. return parent::fat1().'<br>最近又喜欢上钓鱼了~~!';
  16. }
  17. //扩展方法
  18. public function fat3(){
  19. return "姓名:{$this->name}<br>年龄:{$this->age}<br>职业:{$this->profession}";
  20. }
  21. }
  22. $father = new Father();
  23. echo $father->fat1();
  24. echo '<hr>';
  25. $body = new Body();
  26. echo $body->fat1();
  27. echo '<hr>';
  28. echo $body->fat3();

2.抽象类:部分分离了设计与实现

抽象类中完成设计,工作类中完成实现
通过abstract关键字来定义抽象类
描述:1.抽象方法没有方法体。2.只要一个类中有一个抽象方法, 那么这个类就是抽象类。3.抽象类不能被实例化,但是可以被子类继承。
  1. // 方法一:
  2. // 设计类
  3. abstract class Father{
  4. protected $name = '张三';
  5. protected $age = 40;
  6. protected $like = '摄影';
  7. // 只要一个类中有一个抽象方法, 那么这个类就是抽象类
  8. // 抽象方法:没有方法体
  9. abstract protected function fat1();
  10. }
  11. //工作类
  12. class Body extends Father {
  13. private $money = 12000;
  14. // 必须将抽象类中的抽象方法实现
  15. public function fat1(){
  16. return "姓名:{$this->name}<br>年龄:{$this->age}<br>爱好:{$this->like}<br>工资:{$this->money}";
  17. }
  18. }
  19. $body = new Body();
  20. echo $body->fat1();
  21. // 方法二;
  22. // 设计类
  23. abstract class Father{
  24. protected $name = '张三';
  25. protected $age = 40;
  26. protected $like = '摄影';
  27. protected function fat1(){
  28. return "姓名:{$this->name}<br>年龄:{$this->age}<br>爱好:{$this->like}";
  29. }
  30. // 只要一个类中有一个抽象方法, 那么这个类就是抽象类
  31. // 抽象方法:没有方法体
  32. abstract protected function fat2();
  33. }
  34. // 工作类不一定是可以被实例化的普通类,也可是一个抽象类
  35. abstract class Body extends Father {
  36. private $money = 12000;
  37. // 必须将抽象类中的抽象方法实现
  38. protected function fat2(){
  39. return parent::fat1() ."<br>工资:{$this->money}";
  40. }
  41. }
  42. // 最终工作类: 允许实例化
  43. class Bodys extends Body {
  44. public function fat2(){
  45. return parent::fat2();
  46. }
  47. }
  48. $bodys = new Bodys();
  49. echo $bodys->fat2();

3.接口:完全分离了”设计与实现”

关键字: interface
描述:1.使用与类相似的语法: 抽象方法, 常量, 构造方法(魔术方法的一种)2. 默认访问控制必须是public。3. 接口允许多继承, 从而间接实现了PHP的多继承。
  1. // 1、单接口
  2. interface iFather{
  3. // 接口常量
  4. const NATION = '中国';
  5. // 接口方法
  6. public static function fat1();
  7. }
  8. // 工作类实现接口
  9. class Body implements iFather
  10. {
  11. protected static $name = '张三';
  12. // 接口中的抽象方法,必须在工作类实现
  13. public static function fat1()
  14. {
  15. return self::$name . ' 的国籍是: ' . iFather::NATION;
  16. }
  17. }
  18. echo Body::fat1();

个人理解:

1、子类自动继承父类的public和protected属性和方法,子类可以重写父类同名的public和protected属性和方法,也可以在子类中扩展父类没有的属性和方法。
2、类中只要有一个抽象方法,那么就是抽象类。抽象类不能被实例化,但可以被继承,继承的子类也可以是抽象类。
3.接口允许多继承,并且默认访问控制必须是public。
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:继承是类复用的重要手段, 也是构建大型项目的基础
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