PHP 类的继承(extends)
编写了两个文件:person-student.inc和extends.php。
person-student.inc是一个类文件,包含了对一个Person的定义,其中Student类继承了Person类,实现如下所示:
<?php
class Person{
var $id;
var $name;
var $age;
var $email;
function Person($id,$name,$age,$email){
$this->id = $id;
$this->name = $name;
$this->age = $age;
$this->email = $email;
}
function setId($id){
$this->id = $id;
}
function setName($name){
$this->name = $name;
}
function setAge($age){
$this->age = $age;
}
function setEmail($email){
$this->email = $email;
}
function getId(){
return $this->id;
}
function getName(){
return $this->name;
}
function getAge(){
return $this->age;
}
function getEmail(){
return $this->email;
}
function display(){
echo "<B>身份证号:</B>".$this->id."<BR>";
echo "<B>真实姓名:</B>".$this->name."<BR>";
echo "<B>实际年龄:</B>".$this->age."<BR>";
echo "<B>联系邮箱:</B>".$this->email."<BR>";
echo "<BR>";
}
}
class Student extends Person{
var $sno;
var $school;
var $grade;
var $score;
function Student($sno,$name,$school,$grade,$score){
$this->sno = $sno;
$this->name = $name;
$this->school = $school;
$this->grade = $grade;
$this->score = $score;
}
function setSno($sno){
$this->sno = $sno;
}
function setSchool($school){
$this->school = $school;
}
function setGrade($grade){
$this->grade = $grade;
}
function setScore($score){
$this->scorer = $score;
}
function getSno(){
return $this->sno;
}
function getSchool(){
return $this->school;
}
function getGrade(){
return $this->grade;
}
function getScore(){
return $this->score;
}
function display(){
echo "<B>学生个人信息如下:</B><BR><BR>";
parent::display();
echo "<B>学生学号:</B>".$this->sno."<BR>";
echo "<B>所在学校:</B>".$this->school."<BR>";
echo "<B>所在年级:</B>".$this->grade."<BR>";
echo "<B>高考分数:</B>".$this->score."<BR>";
echo "<BR>";
}
function enroll($score){
$flag = floor($score/100);
echo "<B>你的考试录取估计如下:</B><BR>";
switch($flag){
case 7:
case 6:
echo "你的分数为".$score.",好强啊,能够考取一个名牌大学。<BR>";
break;
case 5:
echo "你的分数为".$score.",能够考取一个普通重点大学。<BR>";
break;
case 4:
echo "你的分数为".$score.",能够考取一个普通本科大学。<BR>";
break;
case 3:
echo "你的分数为".$score.",能够考取一个专科大学。<BR>";
break;
default:
echo "你的分数也太低了点,继续努力吧。<BR>";
break;
}
}
}
?>
Student类继承了Person类,继承使用关键字extends;
上面Student类又新增了一些独有的成员变量;
同 时Student类重写了Person类中的同名方法display()方法,在Student类中该方法使用parent关键字调用了基类的 display()方法,调用基类方法使用操作符“::”,当然也可以使用类名来调用(也就是说,parent::display();与 Person::display();是等价的);
Student类又增加了一个enroll()方法的实现。
测试页面为extends.php,实现如下所示:
<?php
require("person-student.inc");
$student = new Student(2008001,"Shinrdrn","长春28中","高三",666);
$student->setId("2224031983011999x");
$student->setAge(26);
$student->setEmail("");
$student->display();
$student->enroll($student->getScore());
unset($student);
?>
启动Apache服务器,在IE地址栏中键入:
http://localhost/shirdrn/oo/extends.php
浏览页面显示结果如下所示:
上面的实现,是将Person类和Student类写在了同一个类文件中,当然也可以将他们分开,每一个类写在一个单独的类文件中,下面使用两个类文件分别实现Person类和Student。
Person类的实现为person.inc,如下所示:
<?php
class Person{
var $id;
var $name;
var $age;
var $email;
function Person($id,$name,$age,$email){
$this->id = $id;
$this->name = $name;
$this->age = $age;
$this->email = $email;
}
function setId($id){
$this->id = $id;
}
function setName($name){
$this->name = $name;
}
function setAge($age){
$this->age = $age;
}
function setEmail($email){
$this->email = $email;
}
function getId(){
return $this->id;
}
function getName(){
return $this->name;
}
function getAge(){
return $this->age;
}
function getEmail(){
return $this->email;
}
function display(){
echo "<B>身份证号:</B>".$this->id."<BR>";
echo "<B>真实姓名:</B>".$this->name."<BR>";
echo "<B>实际年龄:</B>".$this->age."<BR>";
echo "<B>联系邮箱:</B>".$this->email."<BR>";
echo "<BR>";
}
}
?>
Student类的实现为student.inc,如下所示:
<?php
require("person.inc");
class Student extends Person{
var $sno;
var $school;
var $grade;
var $score;
function Student($sno,$name,$school,$grade,$score){
$this->sno = $sno;
$this->name = $name;
$this->school = $school;
$this->grade = $grade;
$this->score = $score;
}
function setSno($sno){
$this->sno = $sno;
}
function setSchool($school){
$this->school = $school;
}
function setGrade($grade){
$this->grade = $grade;
}
function setScore($score){
$this->scorer = $score;
}
function getSno(){
return $this->sno;
}
function getSchool(){
return $this->school;
}
function getGrade(){
return $this->grade;
}
function getScore(){
return $this->score;
}
function display(){
echo "<B>学生个人信息如下:</B><BR><BR>";
parent::display();
echo "<B>学生学号:</B>".$this->sno."<BR>";
echo "<B>所在学校:</B>".$this->school."<BR>";
echo "<B>所在年级:</B>".$this->grade."<BR>";
echo "<B>高考分数:</B>".$this->score."<BR>";
echo "<BR>";
}
function enroll($score){
$flag = floor($score/100);
echo "<B>你的考试录取估计如下:</B><BR>";
switch($flag){
case 7:
case 6:
echo "你的分数为".$score.",好强啊,能够考取一个名牌大学。<BR>";
break;
case 5:
echo "你的分数为".$score.",能够考取一个普通重点大学。<BR>";
break;
case 4:
echo "你的分数为".$score.",能够考取一个普通本科大学。<BR>";
break;
case 3:
echo "你的分数为".$score.",能够考取一个专科大学。<BR>";
break;
default:
echo "你的分数也太低了点,继续努力吧。<BR>";
break;
}
}
}
?>
测试文件为ext.php,在该文件中使用Student类只需要包含student.inc文件:
require("student.inc");
实现代码如下所示:
<?php
require("student.inc");
$student = new Student(2008001,"Zhangsan","XX重点中学","高三",260);
$student->setId("5004031988011999x");
$student->setAge(22);
$student->setEmail("");
$student->display();
$student->enroll($student->getScore());
unset($student);
?>
启动Apache服务器,在IE地址栏中键入:
http://localhost/shirdrn/oo/ext.php
浏览页面显示结果如下所示:
来源:http://hi.baidu.com/shirdrn/item/19b0a6b152894476254b09a9
相关推荐
- **学生类(Student)** - **成员变量**: - `char ID[6]`:学号 - `char Name[10]`:姓名 - `char Gender`:性别 - `int Age`:年龄 - `char Native[20]`:籍贯 - `char Class[6]`:班级 - **成员函数**: ...
- **继承**:Objective-C支持单继承机制,子类可以继承父类的属性和方法。 - **组合**:通过将一个类的对象作为另一个类的成员变量来实现,用于创建更复杂的数据结构。 - **多态**:通过接口或者协议实现,允许子类...
- **相关类**:列出与属性页对话框相关的类,并简要说明每个类的功能。 - **向导对话框的创建及显示**: - **向导对话框概述**:介绍向导对话框的基本概念。 - **创建显示流程**:指导如何创建并显示向导对话框...
- **情感共鸣:** 用拟人化的手法让学生感受到物品也有“感情”,激发他们的同情心。 **应用实例:** - 组织学生参与图书馆或教室清洁活动,让他们亲身体验维护环境整洁的意义。 - 创设情境故事,如讲述书籍“哭泣...
根据给定的信息,我们可以将相关的知识点分为三个主要部分:学校类、学生类和录取类。 ### 一、学校类(School) #### 类的功能与结构 学校类的主要功能是存储学校的录取分数线,并提供设置和获取该分数线的方法。...
- **成员变量:** 包括窗口组件和其他辅助类的实例。 - **方法:** 初始化窗口、设置布局和监听事件。 **2. 数据库操作类 `Database`:** - **职责:** 连接数据库,执行SQL语句。 - **成员变量:** 数据库连接信息...
在本实例中,我们将深入探讨如何使用HTML5和CSS3来实现一个具有视觉吸引力的进度条。进度条在网页中广泛应用,如文件上传、加载过程、任务进度指示等,能有效地向用户反馈操作状态。 首先,HTML5引入了一个新的元素...
- **对象**是类的实例,每个对象都拥有自己的状态(成员变量)和行为(成员方法)。 - 示例代码: ```java class Animal { String name; void makeSound() { System.out.println(name + " makes a sound.");...
- **纯虚函数与抽象类**:含有纯虚函数的类无法实例化。 - **学习要点:** - **动态绑定**:通过指针或引用调用虚函数时,在运行时决定实际调用哪个版本。 - **虚析构函数**:确保派生类对象通过基类指针删除时...
- **答案**: 给定代码片段中`Test`类继承自`Thread`类,并重写了`run()`方法。但在`main`方法中只创建了`Test`对象并调用了`go()`方法,而`go()`方法中创建了两个`Test`对象并调用了`start()`方法。这将创建并启动两...
- 创建一个对象数组,用于存储多个学生的实例,计算并排序每位学生的总成绩,最后输出相关信息。 **重点难点:** - **重点:** 掌握类的定义、对象的创建以及类的基本操作。 - **难点:** 理解封装的意义,能够...
- 在提供的代码中,`Alpha`类继承自`Base`类,并在`main`方法中创建了两个对象:一个是`Alpha`对象,另一个是`Base`对象。由于`Alpha`类没有定义自己的构造方法,因此会默认调用父类`Base`的无参构造方法。因此,...
- **实例018 类选择器应用**:演示了如何为特定类别的元素添加独特的样式效果。 **3.2 JavaScript基础** - **知识点:** - JavaScript是一种常用的客户端脚本语言,用于实现网页上的动态效果。 - 常见的DOM操作...
本实例“C#打印操作实例---打印空学生证书-TU5”显然是一个关于如何在C#中实现打印空学生证书的教程。下面我们将详细探讨相关的C#打印技术知识点。 1. **PrintDocument对象**: - C#中的`System.Drawing.Printing`...
- 当我们创建一个新的类继承自`Thread`时,这个类的实例就是线程对象。我们需要重写`Thread`类的`run()`方法,将线程需要执行的任务放入其中。 - 实例化这个类后,调用`start()`方法会启动新线程,`start()`内部会...