批改状态:合格
老师批语:
大家好:
以下是我对在子类中扩展父类的属性,并重载父类的方法的练习,如有错误望大家指出
<?php
class Phone1
{
protected $brand;
protected $model;
protected $price;
//构造方法
public function __construct($brand,$model,$price)
{
$this->brand = $brand;
$this->model = $model;
$this->price = $price;
}
public function call()
{
return '打电话';
}
}点击 "运行实例" 按钮查看在线实例
<?php
/**
* 创建子类用extends来继承父类
* 子类的功能是用来扩展或重载父类的某些功能
*/
class Phone2 extends Phone1
{
//创建查询器,实现了外部访问
public function __get($name)
{
return $this->$name;
}
//对父类属性进行扩展,增加新的特征,如果不在子类中使用,推荐设置为private
private $camera = false; //是否有照相功能
private $internet = false; //是否有上网功能
//必须使用构造方法对使用当前新增属性生效
public function __construct($brand,$model,$price,$camera,$internet)
{
//调用父类构造器初始化类属性
parent::__construct($brand, $model, $price);
$this->camera = $camera;
$this->internet = $internet;
}
//增加新的方法,扩展父类的功能
public function game()
{
return '玩游戏';
}
//将父类方法进行重写,就是功能重载,必须使用与父类一样的方法名:call()
public function call()
{
return parent::call().',同时还能听歌,看视频';
}
}点击 "运行实例" 按钮查看在线实例
<?php
/*
* 类的继承与方法重载
*
*/
//使用自动加载器来加载类:(简写版)
spl_autoload_register(function($className){
require './class/'.$className.'.php';
});
$Phone2 = new Phone2('vivo','x21', 3488,true,true);
echo '品牌: '.$Phone2->brand.'<br>';
echo '型号: '.$Phone2->model.'<br>';
echo '价格: '.$Phone2->price. '<br>';
//下面输出二个在子类中扩展的属性
echo '照相:'.($Phone2->camera?'支持':'不支持').'<br>';
echo '上网:'.($Phone2->internet?'支持':'不支持').'<br>';
echo $Phone2->call().'<br>'; //call()是父类中的方法
echo $Phone2->game().'<br>'; //game()是子类中的方法点击 "运行实例" 按钮查看在线实例
课程总结
1.了解子类继承父类的方法 — extends 例如:a extends b (子类a继承父类b)
2.学习在子类中调用父类构造器初始化类属性的方法 — parent::__construct()
3.php不支持多继承,仅允许从一个父类上继承,可以继承父类中的公共和受保护的成员
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号