博客列表 >第7章 0202-面向对象编程基础,学习心得、笔记(类声明,类的实例化,类的静态成员与类的扩展,trait功能,及其使用)

第7章 0202-面向对象编程基础,学习心得、笔记(类声明,类的实例化,类的静态成员与类的扩展,trait功能,及其使用)

努力工作--周工--Robin
努力工作--周工--Robin原创
2021年02月24日 02:08:47512浏览

今天所学心得、笔记

示例运行截图

1、Animal父类代码

  1. // 类: 对象的模板
  2. class Animal {
  3. // 类成员: 属性, 方法
  4. // 属性: 变量
  5. protected $name;
  6. protected $age;
  7. // 方法: 函数
  8. // 构造方法
  9. public function __construct($name, $age)
  10. {
  11. $this->name = $name;
  12. $this->age = $age;
  13. }
  14. // 实例方法
  15. public function show() {}
  16. public function speak() {}
  17. }

2、Cat类代码

  1. require 'Loader.php';
  2. class Cat extends Animal {
  3. // 类成员: 属性, 方法
  4. // 属性: 变量, 构造方法, 继承父类的
  5. // 实例方法,重写父类的方法
  6. public function show() {
  7. echo "这是一只小猫,名字叫:{$this->name}, 它{$this->age}岁了...", "<br>";
  8. }
  9. public function speak() {
  10. echo "小猫发出“喵、喵、喵”的叫声...", "<br>";
  11. }
  12. }

3、Dog类代码

  1. require 'Loader.php';
  2. class Dog extends Animal {
  3. // 类成员: 属性, 方法
  4. // 属性: 变量, 构造方法, 继承父类的
  5. // 属性扩展
  6. private $weight;
  7. // 重写构造方法
  8. public function __construct($name, $age, $weight)
  9. {
  10. // $this->name = $name;
  11. // $this->$age = $age;
  12. // 调用父类的通用构造方法
  13. parent::__construct($name, $age);
  14. //增加自己独有的属性
  15. $this->weight = $weight;
  16. }
  17. // 实例方法,重写父类的方法
  18. public function show() {
  19. echo "这是一只小狗,名字叫:{$this->name}, 它{$this->age}岁了, 它{$this->weight}斤重...", "<br>";
  20. }
  21. public function speak() {
  22. echo "小狗发出“汪、汪、汪”的叫声...", "<br>";
  23. }
  24. }

4、Duck类代码

  1. require 'Loader.php';
  2. class Duck {
  3. // 类成员: 属性, 方法
  4. // 属性: 变量, 静态属性
  5. public static $name;
  6. public static $age;
  7. //构造方法, 继承父类的
  8. public function __construct($name, $age)
  9. {
  10. // self: 当前类的引用
  11. self::$name = $name;
  12. self::$age = $age;
  13. }
  14. // 实例方法,重写父类的方法
  15. public static function show() {
  16. echo "这是一只小鸭,名字叫:". self::$name .", 它". self::$age ."岁了...", "<br>";
  17. }
  18. public static function speak() {
  19. echo "小鸭发出“嘎、嘎、嘎”的叫声...", "<br>";
  20. }
  21. }

5、测试PHP文档代码

  1. require 'Loader.php';
  2. echo "------小猫类,继承Animal父类,和其成员/方法--------", "<br>";
  3. $c = new Cat("咪咪", 3);
  4. $c->show();
  5. $c->speak();
  6. echo "<br>";
  7. echo "------小狗有和父类不一样的扩展属性,\$weight--------", "<br>";
  8. $d = new Dog("旺财", 5, 15);
  9. $d->show();
  10. $d->speak();
  11. echo "<br>";
  12. echo "------小鸭采用的是静态成员,和静态方法--------", "<br>";
  13. echo "------静态调用采用,类名 + 双冒号 + 属性/方法名--------", "<br>";
  14. $u = new Duck("小黄", 2);
  15. echo Duck::$name, "<br>";
  16. echo Duck::$age, "<br>";
  17. Duck::show();
  18. Duck::speak();
  19. echo "<br>";
  20. echo "------trait功能,及其使用--------", "<br>";
  21. // 父类
  22. class P
  23. {
  24. public function m1()
  25. {
  26. echo "这里是父类class P的m1()方法", "<br>";
  27. }
  28. }
  29. trait T1
  30. {
  31. public function m1()
  32. {
  33. echo "这里是trait T1的m1()方法", "<br>";
  34. }
  35. }
  36. trait T2
  37. {
  38. public function m1()
  39. {
  40. echo "这里是trait T2的m1()方法", "<br>";
  41. }
  42. }
  43. // 子类
  44. class A extends P
  45. {
  46. use T1,T2{
  47. // 1. 优先级
  48. T1::m1 insteadOf T2;
  49. // 2. 别名
  50. T2::m1 as T2m1;
  51. }
  52. // 在子类中将父类的m1进行了重写
  53. public function m1()
  54. {
  55. echo "这里是自己class A的m1()方法", "<br>";
  56. // return parent::m1();
  57. }
  58. }
  59. echo "------在自己、父类class P和trait T中都有同名m1方法时--------", "<br>";
  60. echo "------自己方法 >>trait T方法 >>class P方法 --------", "<br>";
  61. echo "------当trait T1、T2有相同方法时,需要其中一个起别名 --------", "<br>";
  62. (new A)->m1();
  63. (new A)->T2m1();

6、类的自动加载器代码

  1. spl_autoload_register(function ($class){
  2. require $class.'.php';
  3. });

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