博客列表 >PHP基础知识:类(封装、继承、多态)和抽象类、接口类

PHP基础知识:类(封装、继承、多态)和抽象类、接口类

李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰
李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰原创
2020年05月04日 20:06:07964浏览

类代码练习

1、代码练习

  1. <?php
  2. class A
  3. {
  4. //类通过protected和private关键字来封装
  5. public $name='ldy';
  6. protected $sex='男';
  7. protected $age=28;
  8. public static $course='PHP中文网';
  9. public function getName(){
  10. return __CLASS__.'=>'.__METHOD__;
  11. }
  12. protected function getClass(){
  13. return __CLASS__.':'.$this->getcountvar().'个属性';
  14. }
  15. private function getcountvar(){
  16. return count(get_class_vars(__CLASS__));
  17. }
  18. }
  19. // 继承/扩展
  20. class B extends A
  21. {
  22. public static $work='销售';
  23. // 修改父类中的访问权限遵循:子类的访问权限必须大于等于父类;public≥protected≥private
  24. // 重写
  25. public function getClass(){
  26. return parent::getClass().';'.static::$work;
  27. }
  28. // 多态
  29. public static function get(){
  30. return '调用静态函数'.__METHOD__;
  31. }
  32. }
  33. echo B::$course.B::$work,'<br>';
  34. echo B::get(),'<br>';
  35. $b=new B();
  36. echo $b->getName(),'<br>';
  37. echo $b->getClass(),'<br>';
  38. echo '<hr>';
  39. //抽象类
  40. abstract class C
  41. {
  42. //类通过protected和private关键字来封装
  43. public $name='ldy';
  44. protected $sex='男';
  45. protected $age=28;
  46. public static $course='PHP中文网';
  47. public function getName(){
  48. return __CLASS__.'=>'.__METHOD__;
  49. }
  50. abstract protected function getClass();
  51. abstract protected function getcountvar();
  52. }
  53. // 继承/扩展
  54. class D extends C
  55. {
  56. public static $work='销售';
  57. // 修改父类中的访问权限遵循:子类的访问权限必须大于等于父类;public≥protected≥private
  58. // 重写
  59. // 多态
  60. public static function get(){
  61. return '调用静态函数'.__METHOD__;
  62. }
  63. function getClass(){
  64. return __CLASS__.':'.$this->getcountvar().'个属性'.static::$work;
  65. }
  66. function getcountvar(){
  67. // 父类中的私有变量在继承中是无法直接继承的
  68. return count(get_class_vars(__CLASS__));//返回私有变量不参与计算
  69. }
  70. }
  71. $b=new D();
  72. echo $b->getName(),'<br>';
  73. echo $b->getClass(),'<br>';
  74. // echo $b->getcountvar(),'<br>';
  75. echo '<hr>';
  76. //接口类
  77. interface F
  78. {
  79. const CITY='郑州';
  80. public static function get();
  81. }
  82. class G implements F{
  83. private $word='测试';
  84. public static function get(){
  85. return '我在'.F::CITY;
  86. //return '我在'.F::CITY.$this->word;静态方法无法直接调用类中的属性
  87. }
  88. // 访问私有变量
  89. public function getP(){
  90. return $this->word;
  91. }
  92. }
  93. echo F::CITY,'<br>';
  94. echo G::get(),"<br>";
  95. echo (new G)->getP();

2、演示结果

总结

1、self: 引用当前, $this: 引用当前实例;例如:new self()$this->varA extends B{}:A类继承于B类;
2、global关键字声明访问外部变量;
3、static:静态方法不允许使用$this;只能访问静态成员: 静态属性, 静态方法;
4、static::$courseself::$scourse的区别是,self只认定义的类,static可以区分(父和子),作用于实列类执行
5、类中访问限制(封装):public|protected|private;同一个类中的方法可以访问类中所有的方法和属性
6、 二类成员: 子类有权访问的父类成员类型, public, protected
7、三种操作: 子类对父类的三种操作: 继承, 重写, 扩展
8、类的三个特性:

  1. 1. 继承: 父类的二类成员自动成为子类的成员
  2. 2. 重写: 覆写与父类/基类同名的成员(属性, 方法)
  3. 3. 扩展: 子类添加自身的方法来增加/扩展父类的功能

9、final:类不可继承,方法不可重写
10、abstract声明抽象类(与其他类对比可以有抽象方法);
11、interface:声明接口;implements:继承接口类;接口允许多继承

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议