博客列表 >自动加载,父类与子类的继承与父类重载的方法——2018年5月3日作业

自动加载,父类与子类的继承与父类重载的方法——2018年5月3日作业

白猫警长的博客
白猫警长的博客原创
2018年05月05日 15:31:05917浏览

自动加载、类属性、类继承、父类重载的方法

实例

<?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().',超强散热';
    }
}

运行实例 »

点击 "运行实例" 按钮查看在线实例


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