Blogger Information
Blog 40
fans 0
comment 1
visits 24378
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
第7章 0202-面向对象编程基础,学习心得、笔记(类声明,类的实例化,类的静态成员与类的扩展,trait功能,及其使用)
努力工作--周工--Robin
Original
513 people have browsed it

今天所学心得、笔记

示例运行截图

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. });

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