【PHP面向对象(OOP)编程入门教程】11.类的继承
继承作为面向对象的三个重要特性的一个方面,在面向对象的领域有着及其重要的作用,好像没听说哪个面向对象的语言不支持继承。 继承是PHP5面象对象程序设计的重要特性之一,它是指建立一个新的派生类,从一个或多个先前定义的类中继承数据和函数,而且可以重新定义或加进新数据和 函数,从而建立了类的层次或等级。说的简单点就是,继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可 以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。比如你现在已经有一个“人”这个类了,这个 类里面有两个成员属性“姓名和年龄”以及还有两个成员方法“说话的方法和走路的方法“, 如果现在程序需要一个学生的类, 因为学生的也是人, 所以学生也有成员属性“姓名和年龄”以及成员方法“说话的方法和走路的方法“,这个时候你就可以让学生类来继承人这个类, 继承之后,学生类就会把人类里面的所有的属性都继承过来, 就不用你再去重新声明一遍这些成员属性和方法了, 因为学生类里面还有所在学校的属性和学习的方法,所以在你做的学生类里面有继承自人类里面的属性和方法之外在加上学生特有的”所在学校属性“和”学习的方 法“, 这样一个学生类就声明完成了, 继函我们也可以叫作“扩展”, 从上面我们就可以看出,学生类对人类进行了扩展, 在人类里原有两个属性和两个方法的基础上加上一个属性和一个方法扩展出来一个新的学生类。
通过继承机制,可以利用已有的数据类型来定义新的数据类型。所定义的新的数据类型不仅拥有新定义的成员,而且还同时拥有旧的成员。我们称已存在的用来派生新类的类为基类,又称为父类以及超类。由已存在的类派生出的新类称为派生类,又称为子类。
在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重性。采用继承性,提供了类的规范的等级结构。通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。
在C++语言中,一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继承称为多继承。
但是在PHP和Java语言里面没有多继承,只有单继承,也就是说,一个类只能直接从一个类中继承数据, 这就是我们所说的单继承。
例如:
下面是“人”类的抽象
// 定义一个“人”类做为父类
class Person {
// 下面是人的成员属性
var $name; //人的名子
var $sex; //人的性别
var $age; //人的年龄 // 定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值
function __construct($name, $sex, $age) {
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
} // 这个人可以说话的方法, 说出自己的属性
function say() {
echo "我的名子叫:" . $this->name . " 性别:" . $this->sex . " 我的年龄是:" . $this->age;
}
}
下面我们做一个“学生类”,如果不是用继承如下:
class Student {
// 下面是人的成员属性
var $name; // 人的名字
var $sex; // 人的性别
var $age; // 人的年龄
var $school; // 学生所在学校的属性 // 定义一个构造方法参数为属性姓名$name、性别$sex 和年龄$age 进行赋值
function __construct($name = "", $sex = "", $age = "", $school = "") {
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
$this->school = $school;
} // 这个人可以说话的方法, 说出自己的属性
function say() {
echo "我的名字叫:" . $this->name . " 性别:" . $this->sex . " 我的年龄是:" . $this->age . "<br />";
} // 这个学生学习的方法
function study() {
echo "我的名字叫:" . $this->name . " 我正在" . $this->school . "学习<br />";
}
}
定义一个子类“学生类“使用”extends”关键字来继承”人”类:
class Student extends Person {
var $school; // 学生所在学校的属性 // 这个学生学习的方法
function study() {
echo "我的名字叫:" . $this->name . " 我正在" . $this->school . "学习<br />";
}
}
通过上面“Student“类的定义, Student类通过使用”extends”这个关键字把Person 类里的所有成员属性和成员方法都继承过来了,并扩展了一个所在学校成员属性”school”,和一个学习方法“study()”。现在子类”Student”里面和使用这个类实例出来的对象都具有如下的属性和方法:
学生类”Student”里面的成员属性有:
- 姓名:name;
- 年龄:age;
- 性别:sex;
- 学校:school;
- 学生类”Student”里面的成员方法有:
- 说话方法:say();
- 学习方法:study();
通过上面类继承的使用简化了对象、类的创建工作量,增加了代码的可重性。但是从上面这一个例子上中“可重用性”以及其它的继承性所带来的影响,我们看的还不是特别的明显,你扩展的去想一下,人有无数个岗位,比如上面的学生还有老师、工程师、医生、工人等,很多很多,如果
每个类都定义“人”都共同具有的属性和方法,想一想会有很大的工作量,这些属性和方法都可以从“Person”人类里面继承过来。
延伸阅读:PHP中类的继承和构造函数的继承
【PHP面向对象(OOP)编程入门教程】11.类的继承的更多相关文章
- PHP面向对象(OOP)编程入门教程链接
PHP官方学习OOP: http://php.net/manual/zh/oop5.intro.php 从其他博主学习:(以下链接来源: http://blog.snsgou.com/post-41. ...
- PHP面向对象(OOP)编程入门教程
面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行PHP的高级编程,对于提高 PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们就 ...
- 【PHP面向对象(OOP)编程入门教程】1.什么是面向对象?
面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构,OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成 ...
- 【PHP面向对象(OOP)编程入门教程】2.什么是类,什么是对象,类和对象这间的关系
类的概念:类是具有相同属性和服务的一组对象的集合.它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属 ...
- 【PHP面向对象(OOP)编程入门教程】19.抽象方法和抽象类(abstract)
在OOP语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法做为外部代码访问其的接口.而抽象方法就是为了方便继承而引入的,我们先来看一下抽象类和抽象方法的定义再说明它的用途. 什么是抽象方 ...
- 【PHP面向对象(OOP)编程入门教程】20.PHP5接口技术(interface)
PHP与大多数面向对象编程语言一样,不支持多重继承.也就是说每个类只能继承一个父类.为了解决这个问题,PHP引入了接口,接口的思想是指定了一个实现了该接口的类必须实现的一系列方法.接口是一种特殊的抽象 ...
- 【PHP面向对象(OOP)编程入门教程】23.自动加载类 __autoload()函数
很多开发者写面向对象的应用程序时,对每个类的定义建立一个 PHP 源文件.一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件的列表. 在软件开发的系统中,不可能把所有的类都写在 ...
- 【PHP面向对象(OOP)编程入门教程】4.如何抽象出一个类?
上面已经介绍过了, 面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,所以我们首先要做的就是如何来声明类, 做出来一个类很容易,只要掌握基本的程序语法定义规则就可以做的出来,那么难点在那里呢 ...
- PHP面向对象(OOP)编程入门教程————如何实例化对象?
我们上面说过面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,既然我们类会声明了,下一步就是实例化对象了. 当定义好类后,我们使用new关键字来生成一个对象. $对象名称 = new 类名称 ...
随机推荐
- 64位CentOS源码编译方式安装wine
说明:本文仅作本人笔记的之用,仅供参考.可能因不同环境而不同. 1. 从官网下载最新版的wine-1.6.2.tar.gz 2. 安装相关的包(这里是我安装的,可能由于不同系统已经安装的包不同而不一样 ...
- CentOS设置防火墙开放端口
1. iptables是linux下的防火墙,同时也是服务的名称. service iptables status service iptables start service iptables st ...
- 帝国cms栏目自定义字段首页调用
例如:增加栏目自定义字段:chushi_bpic 用下面的灵动标签和调用: [e:loop={"select C.classid,C.classname,C.classimg,D.chush ...
- Android中定时执行任务的3种实现方法
在Android开发中,定时执行任务的3种实现方法: 一.采用Handler与线程的sleep(long)方法(不建议使用,java的实现方式)二.采用Handler的postDelayed(Runn ...
- HDU 1231 最大连续子序列(水题)
题目链接: 传送门 最大连续子序列 Time Limit: 1000MS Memory Limit: 32768 K Description 给定K个整数的序列{ N1, N2, ..., N ...
- CF 204B Little Elephant and Cards
题目链接: 传送门 Little Elephant and Cards time limit per test:2 second memory limit per test:256 megab ...
- TortoiseSVN 过滤文件(包括已提交和未提交)
一:svn 设置过滤文件方式 1.选中需要过滤的文件夹或者文件---右键---TortoiseSVN---Add to Ignore list(如果不显示说明该目录已经被添加) 2.在当前工作区域 不 ...
- Linux下shell脚本中信号捕获和函数练习脚本之ping一个网段
该脚本主要的目的是练习在Linux bash脚本中捕获信号,顺便练习一下函数的使用,还有就是终止一个正在运行的程序后,该程序打开的文件的后续处理问题等等!脚本功能: ping一个网段内的IP,检测哪 ...
- Saltstack 介绍、安装、配置(一)
Slatstack 介绍 官网:https://saltstack.com/ 官方源:http://repo.saltstack.com/ (介绍各操作系统安装方法) http://repo.sal ...
- Interface/接口
1. 类和结构能够实现接口 2. 接口声明包含如下四种类型:属性.方法.事件和索引:这些函数声明不能包含任何实现代码,而在每一个成员的主体后必须使用分号 3. 继承接口的类或结构必须实现接口中的所有成 ...