批改状态:合格
老师批语:
目录结构
Animal.php
<?php/** 动物类**/class Animal{// 属性前要有访问修饰符// public 默认的, 关键词定义类内、类外、子类都可见// protected 关键词定义类内、子类可见,类外不可见// private 关键词定义类内可见, 子类、类外不可见public $name;public $speed;public $food;private $age;protected $life;// 给private protected属性赋值// 魔术函数 : __set __get __call __callStatic// 构造函数 构造器 类每实例化一次 构造函数自动被调用public function __construct($name, $speed, $food, $age, $life){// 类成员之间的互相访问 $this 本对象// 1.初始化类成员 让类/对象的状态稳定下来// 2.给对象的属性进行初始化赋值// 3.给私有或者受保护的成员属性赋值$this->name = $name;$this->speed = $speed;$this->food = $food;$this->age = $age;$this->life = $life;}public function run(){echo "{$this->name}正以{$this->speed}的速度奔跑。<br>";}public function eat(){echo "{$this->name}喜欢吃{$this->food}<br>";}}
Animal_carnivore.php
<?php/** 食肉动物类* 类的继承(扩展)extends* PHP oop具有单继承的诟病->带来程序的高耦合性:如果程序通过深层次继承绑定到某个具体的类,* 即使对父类做一些简单的修改,也会对子类带来严重的破坏性。* trait trait是为类似php这种单继承的语言而准备的一种代码复用的机制* 要追加的新功能放到一个trait里,然后让A组子类去use trait 不是类*/class Animal_carnivore extends Animal{// 扩展属性private $ferocity;public function __construct($name, $speed, $food, $age, $life, $ferocity){// parent 调用父类的成员// 调用父类构造函数parent::__construct($name, $speed, $food, $age, $life);$this->ferocity = $ferocity;}// 重写父类中的普通方法public function eat(){return parent::eat() . "它是{$this->ferocity}的食肉动物。<br>";}// 扩展方法public function hunting(){echo "{$this->name}通过伏击捕猎。<br>";}}
Fish.php
<?php/** 鱼类** 类的静态成员 static 关键字标识, 静态成员由类本身来调用的,为所有实例共享* 优点* 1.在内存中即使存在多个实例,静态成员在内存中只占一份,为所有实例共享,普通成员以实例的方式会占用多个内存块* 2.静态成员的执行效率比实例化高,不需要类的实例化就能够访问静态成员。* 缺点:静态成员不自动进行销毁,而实例化的结果会被自动销毁*/class Fish{public static $name = '巨齿鲨'; // 默认值static public $count = 0; // 记录构造函数实例化次数function __construct($name){// self::类引用 在类中访问静态成员self::$name = $name;self::$count++;}// 静态方法中不能访问普通成员 只能访问静态成员static function login_count(){return sprintf('目前有%d条鱼。<br>', self::$count);}}// mvc架构模式 那么任何一个url请求都会定位到某一个具体的类(控制器)的方法中
autoload.php
<?php/** 类的自动加载器*/spl_autoload_register(function ($class_name) {$class_file = dirname(__FILE__, 2) . DIRECTORY_SEPARATOR . 'oop' . DIRECTORY_SEPARATOR . $class_name . '.php';if (is_file($class_file) && file_exists($class_file)) {require $class_file;} else {throw new Exception('文件名不合法或者文件不存在。');}});
Animal_world.php
<?phprequire __DIR__ . DIRECTORY_SEPARATOR . 'autoload.php';$zebra = new Animal('斑马', '60公里/小时', '草', 6, 20);$zebra->run();$zebra->eat();$lion = new Animal_carnivore('狮子', '50公里/小时', '肉', 8, 14, '最凶猛');$lion->run();$lion->eat();$lion->hunting();echo '静态成员Fish::$name为:' . Fish::$name . '<br>';$Megalodon = new Fish('巨齿鲨');$Galeocerdo_cuvier = new Fish('虎鲨');$Sousa_chinensis = new Fish('中华白海豚');echo Fish::login_count();
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号