博客列表 >类的继承,抽象类和接口的

类的继承,抽象类和接口的

暝皑祯π_π
暝皑祯π_π原创
2020年05月04日 20:05:28906浏览

类方法

  1. <?php
  2. // 类方法
  3. // 类中的函数
  4. class Car{
  5. public $brand = '红旗';
  6. public $price = '99999';
  7. public $add = '惠州';
  8. public $brand1 = '本田';
  9. public $price1 = '88888';
  10. public static $add1 = '惠州';
  11. //访问类属性1
  12. public function hongqi()
  13. {
  14. // 创建类实例
  15. $cook = new car;
  16. // 访问类中的属性
  17. return "{$cook->add}的價格{$cook->price}";
  18. }
  19. //访问类属性2
  20. public function bentian()
  21. {
  22. // self: 引用当前, $this: 引用当前实例
  23. // 1. 创建类实例, self 与当前的类绑定
  24. // $this不允许用户设置, 由php系统进行维护和赋值
  25. // $this = new self();
  26. // 2. 访问类中的属性, $this 与当前类的实例绑定
  27. // 静态方法: 直接用类调用, 被所有类实例所共享
  28. // 静态方法中只能访问静态成员: 静态属性, 静态方法
  29. return self::$add1 . "的价格{$this->price}";
  30. }
  31. //类中访问外部属性
  32. // 关键字:global
  33. public function byd()
  34. {global $brand2;
  35. return "{$this->add}{$brand2}的价格{$this->price}";
  36. }
  37. // 访问类外部函数:函数的作用域默认是全局, 函数是全局成员
  38. public function jili()
  39. {
  40. $a = jili();
  41. return $a;
  42. }
  43. }
  44. $brand2 = '比亚迪';
  45. $brand3 = '吉利';
  46. function jili()
  47. {
  48. global $brand3;
  49. return $brand3 . '是中国的汽车';
  50. }
  51. $cook = new car;
  52. echo $cook->hongqi();
  53. echo '<hr>';
  54. echo $cook->bentian();
  55. echo '<hr>';
  56. echo $cook->byd();
  57. echo '<hr>';
  58. echo $cook->jili();
  59. echo '<hr>';

作用域

  1. // 作用域
  2. // public: 公开成员,默认值, 类外部, 类内部, 以及类的子类中(类的继承上下文环境中)
  3. // protected: 受保护的成员, 类外部禁止访问, 但是类的内部以及它的继承上下文中可以访问
  4. // private: 私有成员, 除了当前类可以访问, 类的外部以及类的继承上下文中都禁止访问
  5. // 继承上下文环境: 当前类, 以及它的扩展类/子类,构成的一个具有层级结构的类家庭
  6. class Car1{
  7. public $brand5 = '奇瑞';
  8. private $price5 = '66666';
  9. protected $add5 = '惠州';
  10. public function qirui()
  11. {
  12. // 类中方法可以访问类中所有成员, 不受访问控制的限制
  13. return "{$this->add5}{$this->brand5}{$this->price5}";
  14. }
  15. }
  16. $b = new car1;
  17. echo $b->qirui();
  18. echo '<hr>';
  19. echo $b->brand5;
  20. echo '<hr>';
  21. // echo $b->price5; 不能访问
  22. echo '<hr>';
  23. // echo $b->add5; 不能访问
  1. // 子类的创建:关键字:extends
  2. class Car2 extends Car
  3. {
  4. }

继承

  1. // 类的继承三大功能:封装,继承,多态
  2. // 封装:public, proteced, private
  3. // 继承:也叫类的扩展
  4. // 二类成员: 子类有权访问的父类成员类型, public, protected
  5. // 三种操作: 子类对父类的三种操作: 继承, 重写, 扩展
  6. // 1. 继承: 父类的二类成员自动成为子类的成员
  7. // 2. 重写: 覆写与父类/基类同名的成员(属性, 方法)
  8. // 3. 扩展: 子类添加自身的方法来增加/扩展父类的功能
  9. // 基类/父类
  10. class City
  11. {
  12. public $capital = '北京';
  13. protected $district = '密云区';
  14. private $district1 = '东城区';
  15. function compare()
  16. {
  17. return "{$this->capital}最大的区是{$this->district},最小的区是{$this->district1}";
  18. }
  19. }
  20. // 子类:也叫扩展类
  21. // 关键字:extends
  22. class City1 extends City
  23. {
  24. // 重写父类属性:覆写与父类/基类同名的成员(属性, 方法)
  25. public $capital = '西城区 ';
  26. // 重写父类方法:覆写与父类/基类同名的成员(属性, 方法)
  27. public function compare()
  28. {
  29. return "{$this->district}不属于{$this->capital}";
  30. }
  31. // 属性扩展:子类添加自身的方法来增加/扩展父类的功能
  32. public $capital2 ='朝阳';
  33. // 方法扩展:子类添加自身的方法来增加/扩展父类的功能
  34. public function province()
  35. {
  36. return "{$this->capital2}";
  37. }
  38. }
  39. // 子类操作:继承
  40. // 子类中继承了父类的公开成员和受保护成员,所以在子类中也可以访问
  41. $b = new city1;
  42. echo $b->capital;
  43. echo '<hr>';
  44. echo $b->compare();
  45. echo '<hr>';
  46. // 子类操作:重写
  47. echo $b->capital;
  48. echo '<hr>';
  49. echo $b->compare();
  50. echo '<hr>';
  51. // 子类操作:扩展
  52. echo $b->capital2;
  53. echo '<hr>';
  54. echo $b->province();

抽象类

  1. // 抽象类:也叫设计类:关键字:abstract
  2. // 抽象类不能被实例化
  3. // 只要一个类中有一个抽象方法, 那么这个类就是:抽象类
  4. // 实现类/工作类: 是一个可以被实例化的普通类
  5. // 工作类不一定是可以被实例化的普通类,也可是一个抽象类
  6. // 抽象类也可以被继承, 抽象类也可以用在继承的上下文环境中
  7. // 抽象类中允许有抽象成员, 但不是强制的,也可以没有
  8. // 设计类
  9. abstract class Introduce
  10. {
  11. public $name = '小明';
  12. protected $profession = 'it男';
  13. protected $age = '25';
  14. abstract public function poi();
  15. public function lol()
  16. {
  17. return "{$this->name}{$this->profession}";
  18. }
  19. }
  20. // 实现类:也叫工作类
  21. // 在实现类中通过重写方法实现设计类中没有实现的方法
  22. class Jj extends Introduce
  23. {
  24. public function poi()
  25. {
  26. return parent::lol() . "年龄是{$this->age}";
  27. }
  28. }
  29. $h = new Jj;
  30. echo '<hr>';
  31. echo $h->poi();

接口

  1. // 接口
  2. // 接口: 完成分离了"设计与实现"
  3. // 使用与类相似的语法: 抽象方法, 常量, 构造方法(魔术方法的一种)
  4. // 默认访问控制必须是public
  5. // 接口允许多继承, 从而间接实现了PHP的多继承
  6. // implements (英婆慢吃)
  7. // 接口:关键字: interface
  8. interface nem
  9. {
  10. // 接口成员常量:大写
  11. const NAMBER = '15';
  12. // 接口成员方法:抽象方法
  13. public function asd();
  14. }
  15. // 实现类:关键字:implements
  16. class key implements nem
  17. {
  18. public function asd()
  19. {
  20. return nem::NAMBER;
  21. }
  22. }
  23. $v = new key;
  24. echo '<hr>';
  25. echo $v->asd();

总结

  • 1.类属性:是创建在类中,可供类中的所有函数调用
  • 2.方法中的变量:是只有包含它的方法中财能使用它
  • 3.类中方法可以访问类中所有成员, 不受访问控制的限制
  • 4.子类中属性和方法的访问符必需大于类中的访问符
  • 5.一旦类中包含了abstract方法,则这个类必须声明为abstract
  • 6.如果一个类继承了某个抽象类,则它必须实现该抽象类的所有抽象方法 
  • 7.抽象类实现了部分设计与实现,可以有具体的方法也可以有抽象的方法
  • 8.接口完全实现了设计与分类,必须是抽象的方法
  • 9.’继承’关键字extends,接口’实现’关键字implement
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议