Blogger Information
Blog 29
fans 0
comment 0
visits 14888
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP类的自动加载小结
cool442
Original
452 people have browsed it

目录结构

Animal.php

  1. <?php
  2. /*
  3. * 动物类
  4. *
  5. */
  6. class Animal
  7. {
  8. // 属性前要有访问修饰符
  9. // public 默认的, 关键词定义类内、类外、子类都可见
  10. // protected 关键词定义类内、子类可见,类外不可见
  11. // private 关键词定义类内可见, 子类、类外不可见
  12. public $name;
  13. public $speed;
  14. public $food;
  15. private $age;
  16. protected $life;
  17. // 给private protected属性赋值
  18. // 魔术函数 : __set __get __call __callStatic
  19. // 构造函数 构造器 类每实例化一次 构造函数自动被调用
  20. public function __construct($name, $speed, $food, $age, $life)
  21. {
  22. // 类成员之间的互相访问 $this 本对象
  23. // 1.初始化类成员 让类/对象的状态稳定下来
  24. // 2.给对象的属性进行初始化赋值
  25. // 3.给私有或者受保护的成员属性赋值
  26. $this->name = $name;
  27. $this->speed = $speed;
  28. $this->food = $food;
  29. $this->age = $age;
  30. $this->life = $life;
  31. }
  32. public function run()
  33. {
  34. echo "{$this->name}正以{$this->speed}的速度奔跑。<br>";
  35. }
  36. public function eat()
  37. {
  38. echo "{$this->name}喜欢吃{$this->food}<br>";
  39. }
  40. }

Animal_carnivore.php

  1. <?php
  2. /*
  3. * 食肉动物类
  4. * 类的继承(扩展)extends
  5. * PHP oop具有单继承的诟病->带来程序的高耦合性:如果程序通过深层次继承绑定到某个具体的类,
  6. * 即使对父类做一些简单的修改,也会对子类带来严重的破坏性。
  7. * trait trait是为类似php这种单继承的语言而准备的一种代码复用的机制
  8. * 要追加的新功能放到一个trait里,然后让A组子类去use trait 不是类
  9. */
  10. class Animal_carnivore extends Animal
  11. {
  12. // 扩展属性
  13. private $ferocity;
  14. public function __construct($name, $speed, $food, $age, $life, $ferocity)
  15. {
  16. // parent 调用父类的成员
  17. // 调用父类构造函数
  18. parent::__construct($name, $speed, $food, $age, $life);
  19. $this->ferocity = $ferocity;
  20. }
  21. // 重写父类中的普通方法
  22. public function eat()
  23. {
  24. return parent::eat() . "它是{$this->ferocity}的食肉动物。<br>";
  25. }
  26. // 扩展方法
  27. public function hunting()
  28. {
  29. echo "{$this->name}通过伏击捕猎。<br>";
  30. }
  31. }

Fish.php

  1. <?php
  2. /*
  3. * 鱼类
  4. *
  5. * 类的静态成员 static 关键字标识, 静态成员由类本身来调用的,为所有实例共享
  6. * 优点
  7. * 1.在内存中即使存在多个实例,静态成员在内存中只占一份,为所有实例共享,普通成员以实例的方式会占用多个内存块
  8. * 2.静态成员的执行效率比实例化高,不需要类的实例化就能够访问静态成员。
  9. * 缺点:静态成员不自动进行销毁,而实例化的结果会被自动销毁
  10. */
  11. class Fish
  12. {
  13. public static $name = '巨齿鲨'; // 默认值
  14. static public $count = 0; // 记录构造函数实例化次数
  15. function __construct($name)
  16. {
  17. // self::类引用 在类中访问静态成员
  18. self::$name = $name;
  19. self::$count++;
  20. }
  21. // 静态方法中不能访问普通成员 只能访问静态成员
  22. static function login_count()
  23. {
  24. return sprintf('目前有%d条鱼。<br>', self::$count);
  25. }
  26. }
  27. // mvc架构模式 那么任何一个url请求都会定位到某一个具体的类(控制器)的方法中

autoload.php

  1. <?php
  2. /*
  3. * 类的自动加载器
  4. */
  5. spl_autoload_register(function ($class_name) {
  6. $class_file = dirname(__FILE__, 2) . DIRECTORY_SEPARATOR . 'oop' . DIRECTORY_SEPARATOR . $class_name . '.php';
  7. if (is_file($class_file) && file_exists($class_file)) {
  8. require $class_file;
  9. } else {
  10. throw new Exception('文件名不合法或者文件不存在。');
  11. }
  12. });

Animal_world.php

  1. <?php
  2. require __DIR__ . DIRECTORY_SEPARATOR . 'autoload.php';
  3. $zebra = new Animal('斑马', '60公里/小时', '草', 6, 20);
  4. $zebra->run();
  5. $zebra->eat();
  6. $lion = new Animal_carnivore('狮子', '50公里/小时', '肉', 8, 14, '最凶猛');
  7. $lion->run();
  8. $lion->eat();
  9. $lion->hunting();
  10. echo '静态成员Fish::$name为:' . Fish::$name . '<br>';
  11. $Megalodon = new Fish('巨齿鲨');
  12. $Galeocerdo_cuvier = new Fish('虎鲨');
  13. $Sousa_chinensis = new Fish('中华白海豚');
  14. echo Fish::login_count();
Correcting teacher:PHPzPHPz

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