当前位置: 首页 > 图文教程 > 网络编程 > PHP > php面向对象全攻略 (七) 继承性

PHP
用PHP脚本在Linux系统上读取输入和对文
PHP中register_globals引发的问题
PHP基础:安全基础IIS 6的PHP最佳配置
Web开发基础知识分享:Php基础知识了解
实例解析:PHP程序开发中的中文编码问题
PHP5程序中新增加日期(date)函数的常量
新手学堂:PHP服务器变量设置的方法介绍
如何正确理解PHP程序错误信息的表示含义
PHP程序百行代码快速构建简易聊天室方法
如何使用PHP程序开发高效的WEB网络系统
加速PHP动态网站 关于MySQL索引分析优化
教你如何在SQL Server数据库中加密数据
用PHP程序直接调用文本文件内容实例
使用php的zlib压缩和解压缩swf文件
升级PHP5的理由:PHP4和PHP5性能对比
解决php存取mysql 4.1乱码问题
FC 5 php 不可以连接远程mysql数据库
一个特别好的学习PHP引用返回的例子
热门看点:PHP 6新版发布前新特性大展望
开源新版NetBeans让PHP开发变得更加轻松

PHP 中的 php面向对象全攻略 (七) 继承性


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 133 ::
收藏到网摘: n/a

继承作为面向对象的三个重要特性的一个方面,在面向对象的领域有着极其重要的作用,好像没听说哪个面向对象的语言不支持继承。 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."<br>";
}
}

下面我们做一个“学生类”,如果不是用继承如下:代码片段
复制代码 代码如下:

//定义一个“人”类做为父类
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”人类里面继承过来。