自动加载、类属性、类继承、父类重载的方法
实例
<?php /* * 类的继承与方法重载 * * 如果才能正常访问这些属性呢? * 有二个方案来实现 * 1.将父类Computer中的相关属性的访问控制全部设置为public * 2.将父类Computer中的相关属性的访问控制全部设置为protected,并在子类Notebook中创建查询器 * 我们采用第二种方案 * */ //使用自动加载器来加载类:简写版 spl_autoload_register(function($className){ require './class/'.$className.'.php'; }); //加入新的参数 $notebook = new Notebook('小米','笔记本','XM-001','黑色','5999',true); echo '品牌: '.$notebook->brand.'<br>'; echo '类型:'.$notebook->type.'<br>'; echo '型号:'.$notebook->model.'<br>'; echo '颜色:'.$notebook->colour.'<br>'; // 子类中新增的功能 echo '价格:'.$notebook->price.'元<br> '; echo '今日优惠:'.($notebook->activity ? 300 : 0 ).'元<br> '; // 通过方法进行重载新的功能,当访问call()方法名时,会输出子类定义好的功能 echo '操作系统: '.$notebook->gem().'<br> '; echo '功能特点: '.$notebook->call().'<br> ';
运行实例 »
点击 "运行实例" 按钮查看在线实例
父类
<?php /** * 电脑类:computer ——父类 * protected:受保护 */ class Computer { protected $brand; protected $type; protected $model; protected $colour; // 构造方法 public function __construct($brand,$type,$model,$colour) { $this->brand = $brand; $this->type = $type; $this->model = $model; $this->colour = $colour; } public function call() { return '轻薄'; } }
点击 "运行实例" 按钮查看在线实例
子类—继承父类中所有私有和受保护的功能
<?php /** * 笔记本:Notebook * 子类:Notebook 继承 父类:Computer 功能 * 1.类继承:在子类上使用关键字extends * 2.php不支持多继承,仅允许从一个父类上继承 * 3.父类又叫超类或基类,通常只提供一些最基本的功能 * 4.子类又叫派生类,可以继承父类中的公共和受保护的成员 * * 子类的功能是用来扩展或重载父类的某些功能 */ class Notebook extends Computer { //1.无需任何代码,父类Computer中的所有公共和受保护的成员,在当前类中可以直接访问 //创建查询器,实现外部访问 public function __get($brand) { return $this->$brand; } //1.对父类属性进行扩展,增加新的特征,如果不在子类中使用,推荐设置为private private $price = 6999; //扩展价格属性 private $activity = false; //扩展优惠属性 // 必须使用构造方法对使用当前新增属性生效 public function __construct($brand,$type,$model,$colour,$price,$activity) { parent::__construct($brand, $type, $model, $colour); //直接调取父类中的属性 $this->price = $price; $this->activity = $activity; } // 2.使用新的方法来扩展父类中的功能 public function gem() { return 'windows10 旗舰版'; } //3.将父类方法进行重写,就是功能重载,必须使用与父类一样的方法名:call() public function call() { //此时,访问call()将会输出子类定义的功能 //但更多的时候,我们并不会放弃原有功能,而只是在它上面进行追回而已 //那么,如何在子类中引用父类中的方法呢? 使用关键字: parent,后面跟上双冒号:: return parent::call().',超强散热'; } }
运行实例 »
点击 "运行实例" 按钮查看在线实例