Blogger Information
Blog 59
fans 0
comment 1
visits 48149
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
自动加载,父类与子类的继承与父类重载的方法——2018年5月3日作业
白猫警长的博客
Original
918 people have browsed it

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

实例

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

运行实例 »

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


Correction status:Uncorrected

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