首页 PHP5面向对象初步(第二章)

PHP5面向对象初步(第二章)

举报
开通vip

PHP5面向对象初步(第二章) PHP 面向对象 1 Created by 刀客羽朋 第二章 PHP5 面向对象进阶 10 月 27 日,家里添了一个男孩,生活变的忙碌起来。照顾小宝宝是件辛苦的事情,也 更明白父母的辛苦。工作之余,继续写起来时间越来越紧张。 祝老婆早日康复,祝我的小宝健康成长,祝父母身体健康。 如果看到代码有什么问题。可以到 phpchina.com 我的博客留言给我。http://www.phpchina.com/?10 。 ...

PHP5面向对象初步(第二章)
PHP 面向对象 1 Created by 刀客羽朋 第二章 PHP5 面向对象进阶 10 月 27 日,家里添了一个男孩,生活变的忙碌起来。照顾小宝宝是件辛苦的事情,也 更明白父母的辛苦。工作之余,继续写起来时间越来越紧张。 祝老婆早日康复,祝我的小宝健康成长,祝父母身体健康。 如果看到代码有什么问题。可以到 phpchina.com 我的博客留言给我。http://www.phpchina.com/?10 。 再次感谢 www.phpchina.com gaoxiangming@hotmail.com 刀客羽朋 石家庄 2006-11-19 PHP 面向对象 2 Created by 刀客羽朋 目录 2.1 类的继承..........................................................................................................................3 什么是继承.......................................................................................................................3 PHP5 中的继承 ................................................................................................................5 继承的简单例子...............................................................................................................6 构造函数的继承...............................................................................................................8 私有变量和 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 不被继承...............................................................................................9 2.2 访问控制...........................................................................................................................10 Private的访问权限 .........................................................................................................10 protected的访问权限 ......................................................................................................11 public的访问权限...........................................................................................................12 2.3 重写(override) ..........................................................................................................13 重写方法与访问权限.....................................................................................................15 重写时的参数数量.........................................................................................................16 构造函数重写.................................................................................................................17 2.4 this关键字 ......................................................................................................................18 局部变量和全局变量与 $this 关键字 .........................................................................19 用$this调用对象中的其它方法 .....................................................................................20 使用$this调用构造函数 .................................................................................................21 $this 到底指的什么? ...................................................................................................21 通过 $this 传递对象 .....................................................................................................22 2.5 parent::关键字 ...............................................................................................................23 通过parent::调用父类方法.............................................................................................23 父类的private属性..........................................................................................................24 2.5 重载 Overload...............................................................................................................29 在PHP5 中不支持重载。 ..............................................................................................29 2.7 实例..................................................................................................................................31 PHP 面向对象 2.1 类的继承 什么是继承 前面说过,面向对象的思想和我们的生活是息息相通的。 我们先分析一个生活中的例子: 自行车、折叠车、电动车的关系。 例 1: 自行车有什么特征(属性)? z 两个轱辘 z 一个车座 z 两个脚蹬子 z 有颜色 自行车有什么动作(方法)? z 骑行 z 刹车 折叠自行车有什么特征(属性)? z 两个轱辘 z 一个车座 z 两个脚蹬子 z 有颜色 折叠自行车有什么动作(方法)? z 骑行 z 刹车 z 折叠 电动自行车有什么特征(属性)? z 两个轱辘 z 一个车座 z 两个脚蹬子 z 有颜色 z 电池一块 电动自行车有什么动作(方法)? z 骑行 z 刹车 z 电动行驶 上面的三个 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 格,说明了自行车、折叠自行车、电动自行车特性。 我们描述折叠自行车和电动自行车时,除红色标注的部分,都和自行车一样。 3 Created by 刀客羽朋 PHP 面向对象 我们尝试用另外一种方式,建立模型的方式来描述一次。 例 2: 自行车有什么特征(属性)? z 两个轱辘 z 一个车座 z 两个脚蹬子 z 有颜色 自行车有什么动作(方法)? z 骑行 z 刹车 折叠自行车有什么特征(属性) z 折叠自行车和自行车有相同的属性 折叠自行车有什么动作(方法) z 折叠自行车具有自行车的所有方法。 z 增加了折叠方法。 电动自行车和自行车有相同的属性和方法。 z 增加了电池一块 z 增加了电动行驶的方法。 这次的描述变简单了,只需要将增加的内容填写上去。关于自行车的描述被复用了。 仔细再观察对自行车的描述,我们发现上面三个自行车都缺少了一个重要的属性”车主架”。 在例 1 中,我们要在三个描述中分别添加”车铃铛”,这个属性。 在例 2 中,我们只要在自行车的描述中加入属性“车铃铛”,另外两个描述不用变化就完成 内容的添加。同样,动作(方法)的变化也很容易。 感觉到了什么了么?它让我们的描述更容易“扩充和维护”。 4 Created by 刀客羽朋 PHP 面向对象 5 Created by 刀客羽朋 PHP5 中的继承 z 继承是面向对象最重要的特点之一,就是可以实现对类的复用。 z 通过“继承”一个现有的类,可以使用已经定义的类中的方法和属性。 z 继承而产生的类叫做子类。 z 被继承的类,叫做父类,也被成为超类。 z PHP 是单继承的,一个类只可以继承一个父类,但一个父类却可以被多个子类所继承。 z 从子类的角度看,它“ 继承(inherit , extends)”自父类;而从父类的角度看,它“派 生(derive)”子类。它们指的都是同一个动作,只是角度不同而已。 z 子类不能继承父类的私有属性和私有方法。 z 在 PHP5 中类的方法可以被继承,类的构造函数也能被继承。 PHP 面向对象 继承的简单例子 我们分析自然界中的关系,动物类与犬类的关系。 例 2-1 animal.php Dog 类继承自 animal 类。 Dog.php 6 Created by 刀客羽朋 PHP 面向对象 当我们实例化 animal 类的子类 Dog 类时, 父类的方法 setWeight() 和 getWeight() 被继 承。 我们可以直接调用父类的方法设置其属性$weight,取得其属性$weight 。 dog 类的实例。 7 Created by 刀客羽朋 PHP 面向对象 构造函数的继承 有些资料上说 PHP5 的构造函数不被继承。 演示的结果证明,PHP5 的构造函数被继承了。 当子类 Dog1 被实例化时,继承的构造函数被调用了。 屏幕上显示了一句 "I am an Animal.". 8 Created by 刀客羽朋 PHP 面向对象 私有变量和方法不被继承 z 私有变量不被继承,私有方法也不被继承。 z 另外一种说法,私有变量和属性被继承了,但不能被调用。 z 无论怎么说,都不能调用父类的私有属性和私有方法。 例 2-2-4 9 Created by 刀客羽朋 PHP 面向对象 2.2访问控制 在 PHP5 中,可以在类的属性和方法前面加上一个修饰符(modifier),来对类进行一些访问 上的控制。 下面表格显示了访问的权限。 修饰符 同一个类中 子类中 全局 private Yes protected Yes Yes public Yes Yes Yes(默认) Private 的访问权限 例 2-2-1 private 不能直接被外部调用,只能由当前对象调用。 前面介绍过关于封装的内容.这里不再重复。 比如你可以借钱给别人,但不希望别人知道你钱包里面有多少钱。 我们把它用 private 隐藏起来。 10 Created by 刀客羽朋 PHP 面向对象 protected 的访问权限 例 2-2-2 演示 protected 修饰的属性和方法只能被子类调用。外界无法调用。 11 Created by 刀客羽朋 PHP 面向对象 public 的访问权限 例子 2-2-3 数据的隐藏和封装是能够帮助我们保护数据的安全性。 Public 修饰的属性和方法,可以被无限制的调用。 嘿。。你的钱,不安全了。 12 Created by 刀客羽朋 PHP 面向对象 13 Created by 刀客羽朋 2.3 重写(override) ••如果从父类继承的方法不能满足子类的需求,可以对其进行改写, 这个过程叫方法的覆盖(override),也称为方法的重写。 •当对父类的方法进行重写时,子类中的方法必须和父类中对应的方 法具有相同的方法名称,在 PHP5 中不限制输入参数类型、参数数量 和返回值类型。(这点和 JAVA 不同) •子类中的覆盖方法不能使用比父类中被覆盖方法更严格的访问权 限。 ••声明方法时,如果不定义访问权限。默认权限为 public。 PHP 面向对象 PHP5 重写方法 先设置一个父类,这个父类是 “Dog”类,这个类描述了 dog 的特性。 Dog 有 2 个眼睛,会跑,会叫。就这样描述先。 我养了一直狗,是只小狗,符合 Dog 类的特性,但有所不同。 我的小狗有名字,我的小狗太小了,不会大声的叫,只会哼哼。 我们用继承的概念去实现这个设计。 例子 2-3-1 14 Created by 刀客羽朋 PHP 面向对象 重写方法与访问权限 子类中的覆盖方法不能使用比父类中被覆盖方法更严格的访问权限。 例 2-3-2 父类为 public 子类为 private 时。 父类为 public 子类为 protected 时。 15 Created by 刀客羽朋 PHP 面向对象 重写时的参数数量 例 2-3-3 子类可以拥有与父类不同的参数数量。(这点与 java 不同,PHP 是弱类型语言。) 16 Created by 刀客羽朋 PHP 面向对象 构造函数重写 下面这个例子中,父类和子类都有自己的构造函数,当子类被实例化时,子类的构造函数被 调用,而父类的构造函数没有被调用,请对比第一节的构造函数继承。 例子:2-2/ extends1.php (注:这点和 Java 不同,在 java 中构造函数是不能被继承的,而且子类实例化时,子类的 构造函数被调用,父类的构造函数也会调用。) 17 Created by 刀客羽朋 PHP 面向对象 18 Created by 刀客羽朋 2.4 this关键字 z PHP5 中为解决变量的命名冲突和不确定性问题,引入关键字 “$this”代表其所在当前对象。 z $this 在构造函数中指该构造函数所创建的新对象 z 在类中使用当前对象的属性和方法,必须使用$this->取值。 z 方法内的局部变量,不属于对象,不使用$this 关键字取值。 PHP 面向对象 局部变量和全局变量与 $this 关键字 例 2-4-4.php 使用当前对象的属性必须使用$this 关键字。 局部变量的只在当前对象的方法内有效,所以直接使用。 注意:局部变量和属性可以同名,但用法不一样。在使用中,要尽量 避免这样使用,以免混淆。 19 Created by 刀客羽朋 PHP 面向对象 用$this 调用对象中的其它方法 例:2-4-5 20 Created by 刀客羽朋 PHP 面向对象 使用$this 调用构造函数 例:2-4-6 调用构造函数和析构函数的方法一致。 $this 到底指的什么? $this 就是指当前对象,我们甚至可以返回这个对象使用 $this 例 2-4-7 21 Created by 刀客羽朋 PHP 面向对象 通过 $this 传递对象 22 Created by 刀客羽朋 PHP 面向对象 2.5 parent::关键字 •PHP5 中使用 parent::来引用父类的方法。 parent:: 可用于调用父类中定义的成员方法。 parent::的追溯不仅于直接父类。 通过 parent::调用父类方法 例 2-5-1 23 Created by 刀客羽朋 PHP 面向对象 父类的 private 属性 这个东西解释起来十分的不爽。 Private 属性是不能被继承的,如果父类有私有的属性。那么父类的方法只为父类的私有属 性服务。 例:2-5-2 下面的例子看起来很奇怪,在子类中重新定义了一个属性$sal 系统却返回了父类的属性。 如果父类中的属性被子类重写了。结果是这样的。 注意 第 5 行的属性定义变成了 protected。 24 Created by 刀客羽朋 PHP 面向对象 子类中重写的方法对当前 private 有效。 例:2-5-3.php 25 Created by 刀客羽朋 PHP 面向对象 打开 zend 调试状态看看,内存中的情况。注意最下面,有两个$sal 。分别是 3000 和 5000 。 例:2-5-4.php 26 Created by 刀客羽朋 PHP 面向对象 将父类的属性$sal 改成 protected ,子类重写了父类的属性。 在内存中只有一个 $sal . 例:2-5-5.php 如果你学过 java,你会觉得这一切都是很难理解的。 在 Java 中当子类被创建时,父类的属性和方法在内存中都被创建,甚至构造函数也要被调 用。 PHP5 不是这样,PHP5 调用父类用的是 parent:: 而不是 parent-> ,这足以说明 PHP5 不想 在内存中让父类也被创建。PHP5 想让继承变的比 Java 更简单。 适应下就好。 27 Created by 刀客羽朋 PHP 面向对象 这样调用会让 PHP5.1.1 溢出。新版不知道有没有问题。 例:2-5-10.php 第 13 行改成这样就好了。注意比较。 return parent:: getSal(); 这样的代码引起了递归操作,子类调用父类的方法,父类又调用子类方法。 return parent::$this->getSal(); 28 Created by 刀客羽朋 PHP 面向对象 2.5 重载 Overload z 当类中的方法名相同时,称为方法的重载(overload) z 重载是 Java 等面向对象语言中重要的一部分。 z 在 PHP5 中不支持重载。 在 PHP5 中不支持重载。 例 2-4-1 先写一个取最大值的类。 29 Created by 刀客羽朋 PHP 面向对象 例:2-4-2 如果传递过来三个数值。如何计算? 下面的写法,在 Java 中是太平常不过了。但是在 PHP5 中,不能这样。 PHP5 不支持有多个相同名称的方法,也就是不支持重载。 例 2-4-3 对于一个方法,缺少参数时候会报错。 当参数太多的时候,PHP 就当什么都没有看到。程序可以正常运行。 30 Created by 刀客羽朋 PHP 面向对象 31 Created by 刀客羽朋 2.7 实例 简单写一个实例,这个例子只是本章内容的表达。在了解更多面向对象内容后,相信你 能写出更合适的表达代码。 在上一章,我们写了一个建立用户 user 类,直接使用 user 类读取用户信息的类。假设 我们又有了新的需求。 z 任何用户都可以查看别的用户的信息,当然不能看到别人的密码。 z 任何用户都可以修改自己的密码。 于是我们对第一章的类做些改动,首先我们在 userInfo 类中,将获得密码的方法隐藏。 我们再写一个 UserChange 类继承自 userInfo,在 UserChange 中增加修改密码的方法。 并将获取密码的方法重写为 public 权限。 这样,在你的页面中,就可以创建两种 user。一种是只能看到信息不能看到密码、不能 修改密码的 userInfo 的实例。另外一种是比 userInfo 功能更强的 UserChange 类,这个实例 可以修改密码,可以获得密码。 在合适的位置创建不同的 user,就是你的业务逻辑的内容了。 同时,我们独立出一个数据库连接类,数据库连接类比较完善的网上有很多,大家学习 完毕面向对象后,自己也可以写出更完善的数据库类。 PHP 面向对象 Mysql 连接类。 父类 User 类 32 Created by 刀客羽朋 PHP 面向对象 子类 UserInfo 类 添加了修改密码的方法,重写并公开了获取密码的方法。 33 Created by 刀客羽朋 PHP 面向对象 34 Created by 刀客羽朋 PHP 面向对象 在任何位置都可以放心使用 userInfo 类。 可以重设密码的 Userchange 类的实例。 35 Created by 刀客羽朋 PHP 面向对象 36 Created by 刀客羽朋 本章介绍了,PHP5 面向对象关于继承、重载、重写、$this 关键字,通过 parent 调用父类方法等 PHP5 面向对象初步的 知识。 下一章,面向对象设计进阶。希望大家支持。 2.1 类的继承 什么是继承 PHP5中的继承 继承的简单例子 构造函数的继承 私有变量和方法不被继承 2.2访问控制 Private的访问权限 protected的访问权限 public的访问权限 2.3 重写(override) 重写方法与访问权限 重写时的参数数量 构造函数重写 2.4 this关键字 局部变量和全局变量与 $this 关键字 用$this调用对象中的其它方法 使用$this调用构造函数 $this 到底指的什么? 通过 $this 传递对象 2.5 parent::关键字 通过parent::调用父类方法 父类的private属性 2.5 重载 Overload 在PHP5中不支持重载。 2.7 实例
本文档为【PHP5面向对象初步(第二章)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_028210
暂无简介~
格式:pdf
大小:837KB
软件:PDF阅读器
页数:0
分类:互联网
上传时间:2011-11-21
浏览量:17