




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PHP+MySQL动态网页技术教程第10章面向对象程序设计在商城中的应用10.1项目导引:图书显示模块过程化的编程面向对象的程序设计(OOP)基于面向对象的图书显示模块又该如何开发呢?10.2项目分析面向对象的程序设计(OOP)是一种编程思想,它力图使计算机语言中对事物的描述与现实世界中该事务的本来面目尽可能的一致,使代码具有“物”的意义。例如,我们要“自驾出游”,需要人开着车行驶,至于沿什么路线走我们不关心,只要求到达目的地。这里涉及到“人”和“车”两个实物。人具有“姓名”、“性别”等特征和“开车”等行为。汽车具有“车牌号”、“颜色”等特征和“行驶”等行为。上述问题反映到软件系统中,就是我们要讲的面向对象,现实中所提到的“车”和“人”,将会在面向对象中被抽象成类,具有具体特征和行为的“车”和“人”视为对象,“车”和“人”的特征和行为视为对象的属性和方法。10.2项目分析面向对象的思想来源于人们对现实世界的认知,符合人们讨论事物的探究“是什么,做什么,怎么做”的一般规律。面向对象就是将要处理的问题抽象为对象,然后通过对象的属性和行为来解决对象的实际问题。在图书显示开发模块中,我们把“数据库”抽象为类,具体的图书商城数据库视为对象,连接数据库需要主机名、账户、密码、数据库名等特征,这些特征视为数据库对象的属性,数据库的添加、修改、删除和查询等行为视为数据库对象的方法。10.3技术准备10.3.1面向对象的基本概念1.什么是类属性、方法2.什么是对象3.类和对象的关系10.3技术准备10.3.2类的声明1.类的定义和很多面向对象语言一样,在PHP中也是通过class关键字来定义类的。语法格式如下:权限修饰符class类名{
类体;}权限修饰符是可选项,值可以为public、protected和private,也可以省略不写;class是创建类的关键字;类名可以是任意数字和字母的组合,但是不能以数字开头;类体必须放在两个大括号之间。10.3技术准备10.3.2类的声明2.成员属性类中可以定义称之为属性的特定变量,用来存储对象不同的属性信息。要求必须使用public、private和protected三个限定词之一来修饰3.成员方法在类中声明的函数称之为成员方法。成员属性可以让对象存储数据,成员方法则可以让对象执行任务例10-110.3技术准备10.3.3类的实例化1.创建对象面向对象程序的最终操作者是对象,而对象是类实例化的产物。定义好一个类之后,就可以使用new关键字来创建一个基于该类的对象,类的实例化的格式如下。$变量名=new类名称()$变量名:类实例化返回的对象名;new:关键字,表明要创建一个新的对象。例10-210.3技术准备2.访问类中的成员类中包括成员属性和成员方法,实例化的对象中就会包含这些属性和方法。当我们需要访问这些属性时,用“->”运算符来引用他们。例10-33.“$this”关键字我们使用“变量对象名->…”在对象的外部调用它的某些属性和方法。那么,当一个类还没有实例化的时候,如何访问成员属性和方法呢?即在类的内部如何访问自身成员属性和方法?我们使用一个特殊的对象引用方法“$this”关键字。例10-410.3技术准备4.构造方法和析构方法构造方法是在使用new关键字创建对象时自动调用的方法,通常用于完成类的初始化工作。在PHP5中使用“__construct()”来声明构造方法(__是两个下划线),语法格式如下:function__construct([mixedargs[,…]]){}在PHP中,一个类只能声明一个构造方法,构造方法可以有参数。析构方法的作用和构造方法正好相反,是对象被销毁之前最后一个被对象自动调用的方法,用于实现在销毁一个对象之前执行一些特定的操作,诸如关闭文件和释放内存等。析构方法使用“__destruct()”声明例10-510.3技术准备10.3.4类的继承性继承是类的强大功能,是面向对象的程序设计的特点之一,它使一个类继承并拥有另一个已存在类的成员属性和成员方法,其中被继承的类称为父类,继承的类称为子类。通过继承能够提高代码的重用性和可维护性。类的继承是类与类之间的一种关系的体现。子类从父类继承了所有的属性和方法(私有属性和方法不能被继承),在子类中也可以添加自己的属性和方法,从而扩充子类的功能,子类继承父类的属性和方法不能被注销,也不能减少,但是可以用新的值来覆盖他们。10.3技术准备10.3.4类的继承性1.extends关键字一个子类可以从一个父类中继承属性和方法,这叫做单继承;也可以从多个父类中同时继承属性和方法,这叫做多继承。PHP5不支持多继承,在PHP中使用extends关键字来继承一个父类,语法格式如下:class子类名称extends父类名称{ //子类成员属性列表
//子类成员方法列表}例10-610.3技术准备10.3.4类的继承性2.方法的覆盖如果在子类中命名了一个与父类中同名的方法,这就改写了父类已有的方法,则父类的这个方法就不会再被执行,而是执行子类的这个方法,这种情况称为方法的覆盖。例10-73.parent::关键字在类的继承的时候,子类如果定义了和父类相同的方法,则父类的方法就被覆盖了,这时,如果我们希望保留父类方法的功能,子类中的方法只是在父类方法的基础做一些功能扩充,而不是覆盖,该如何解决呢?在子类中可以使用“parent::”关键字来调用父类中被覆盖的方法,此时在子类中可以保留父类方法的功能。parent只在子类中使用,特指它的父类,不管父类的名字是什么,parent不能访问父类的private成员。例10-810.3技术准备10.3.5类的封装性面向对象的特点之二是封装性,其目的是确保在类的外部不能访问类的内部数据,从而可以开发出一个可靠的面向对象的应用程序,并且构建可重用的面向对象类库。类的封装是通过关键字public、private、protected实现。在任何地方都可以访问public(公共成员)方法或属性;只能在当前类中才能访问private(私有成员)方法或属性,即使在子类中也不能访问;可以在当前类或子类中访问protected(保护成员)方法或属性,其它外部代码无权访问。例10-9、例10-10、例10-11
10.4项目实施图书分页显示模块的开发数据库类(mysql.class.php)分页类(page.class.php)数据库操作和分页显示功能都是我们在项目开发过程中使用频率非常高的,所以我们将它们封装到类中,项目中如果需要操作数据库或分页显示的功能,只需调用对应的类即可完成。10.4项目实施10.4.1数据库类通过前面的学习我们知道,连接数据库需要服务器地址、用户名、密码、数据库名等信息,我们把这些内容作为类的成员属性,数据库连接操作通过类的方法实现,数据库的增、删、改、查操作也通过类的方法实现。
10.4.2分页类在分页显示中有总记录数、每页显示的记录数、当前显示的页数和总页数等几个要素,在分页类中这些要素定义为类的成员属性。分页显示的算法定义为分页类的一个方法,实现分页显示的功能。
10.4.3图书分页显示10.5技术拓展10.5.1抽象类和接口1.抽象类抽象类是一种特殊的类,抽象类不能被实例化,只能被继承。抽象类中至少有一个抽象方法,所谓抽象方法是指没有方法体的方法。在声明抽象类和抽象方法时都需要使用abstract关键字。父类所有的抽象方法在子类中必须被重写,如果子类中还有抽象方法,那这个子类还是抽象类,不能被实例化。下面定义一个抽象类,抽象类中可以有不是抽象的方法和属性。abstractclass抽象类名称{public$a;//成员属性abstractfunctionfun1();//抽象方法abstractfunctionfun2();//抽象方法functionfun3(){//非抽象方法}}10.5技术拓展10.5.1抽象类和接口1.抽象类抽象类是一种特殊的类,抽象类不能被实例化,只能被继承。抽象类中至少有一个抽象方法,所谓抽象方法是指没有方法体的方法。在声明抽象类和抽象方法时都需要使用abstract关键字。父类所有的抽象方法在子类中必须被重写,如果子类中还有抽象方法,那这个子类还是抽象类,不能被实例化。下面定义一个抽象类,抽象类中可以有不是抽象的方法和属性。abstractclass抽象类名称{public$a;//成员属性abstractfunctionfun1();//抽象方法abstractfunctionfun2();//抽象方法functionfun3(){//非抽象方法}}10.5技术拓展10.5.1抽象类和接口1.抽象类面向对象程序设计一个核心原则是“开-闭”原则,就是指对扩展开放,对修改关闭。为了实现这一原则,抽象类在其中扮演了重要的角色。我们之所以设计抽象类和抽象方法,是为了将抽象方法做为子类重载的模板使用的,定义抽象类实际就是定义了一种规范,要求子类必须去遵守。例10-1510.5技术拓展2.接口在PHP5中不支持多继承,只支持单继承,为了实现多继承的功能,在PHP中引入了接口的概念。接口是一种特殊的抽象类,接口的声明使用interface关键字。interface接口名称{ publicfunctionfun1(); publicfunctionfun2();}接口也不能进行实例化操作,如果要使用接口中的成员,就必须借助子类来实现。接口的继承通过implements关键字来实现,如果要实现多接口的继承,在接口之间必须使用逗号“,”分隔。10.5技术拓展2.接口接口的引用主要分为以下4种情况:普通类引用接口classsonimplementsinter1,inter2,inter3{……}抽象类引用接口abstractclasssonimplementsinter1,inter2,inter3{……}继承父类引用接口classsonextendsfatherimplementsinter1,inter2,inter3{……}接口与接口继承interfaceinter1extendsinter2{……}例10-1610.5技术拓展2.接口与抽象类的区别抽象类和接口有相同之处,也有类似的功能,但是它们之间还是存在很多区别。抽象类声明使用abstract关键字,接口声明使用interface关键字;抽象类的继承使用extends关键字,接口的实现使用implements关键字;抽象类中可以有数据成员,但是接口中没有数据成员;抽象类中可以有构造函数,但是接口没有构造函数;一个类只能继承于一个抽象类,但是可以实现多个接口;抽象类中可以有非抽象方法,但是接口中所有方法必须为抽象方法;抽象类中抽象方法的声明需要使用abstract关键字,接口中不需要。10.5技术拓展10.5.2类的多态性面向对象编程的特点之三是多态性。当我们在子类中改写了父类的方法,或者用多个类实现同一个接口时,都会出现同名方法却又不同行为的情况发生,这种情况叫做面向对象的多态性。在面向对象体系中,多态性是把设想与实现分开的手段,是指发出的同样消息被不同的对象接受时导致不同的行为。多态性是一种通过多种状态或阶段来描述相同对象的编程方法,其真正意义在于在实际开发中,我们只需要关注一个接口或基类的编程,而不必担心一个对象所属于的具体类。例10-17、例10-18
10.5技术拓展10.5.3常用关键字和方法1.clone关键字在PHP中提供了一种对象克隆的方法,可以克隆出一个一模一样的对象,修改克隆对象不会对原对象造成任何影响。使用clone关键字可以实现对象的克隆,PHP还定义了在对象克隆时自动调用的方法__clone()。例10-1910.5技术拓展10.5.3常用关键字和方法2.const关键字const关键字用来定义类中的常量,成员常量就是值不会改变的量。const只能修饰类当中的成员属性。常量可以在类没有实例化时直接使用,使用方法为:类名::常量名。语法格式如下:classclass_name{constNAME;}class_name::NAME;10.5技术拓展10.5.3常用关键字和方法3.self关键字用来在类的内部访问当前类中的内容的关键字,类似与$this关键字,但$this是需要类实例化以后才可以使用,self可以在类没有实例化时直接访问当前类中的内部成员。语法格式如下:self::成员由于在类没有实例化时,类访问内部属性或者方法是没有意义的,所以self一般用来访问类中的静态成员、常量或者其它定义内容。10.5技术拓展10.5.3常用关键字和方法4.static关键字在PHP中用来static关键字修饰的成员属性和成员方法称为静态属性和静态方法。静态属性和静态方法可以在类未被实例化时直接使用。语法格式如下:classclass_name{static$name;//静态属性staticfunctionfun_name(){//静态方法
……}}在类的外部访问静态成员方法:类名称::静态成员。在类的内部访问静态成员的方法有两种方法:类名称::静态成员和self::静态成员。例10-2010.5技术拓展10.5.3常用关键字和方法5.__call()方法当程序访问一些不存在的或不可见的成员方法时,PHP会先调用__call()方法,用来解决调用不存在方法时的异常处理,使程序继续正常运行。该方法包含方法名和方法参数两个参数,其中方法参数以数组形式存在。例10-2110.5技术拓展10.5.3常用关键字和方法6.__tostring()方法通过这个方法可以让我们直接打印对象,从而获得该类的基本信息。例10-227.__autoload()方法在应用程序开发中,我们通常要创建多个类,并且将每个类放到单独的文件中,文件名和类名要保持一致。如果在一个页面中要使用这些类,就需要多次使用include或requre函数包含这些文件,然后才能进行实例化等操作,比较麻烦!使用__autoload()方法可以解决这个问题,它可以快速取得实例化对象的名称并自动载入当前页面。该方法与前面几个方法不同,它是在类的外部使用。例10-2310.6本章小结面向对象程序设计的诞生改变了以往软件开发策略,是现代软件开发方法的主流。本章按照面向对象的思想完成了图书显示模块的开发,在这过程当中学习了面向对象程序设计的思想,包括类的声明、对象的实例化、类的封装、继承和多态3大特性。为了保证大家对面向对象有一个更全面的认识,在技术拓展部分对抽象类、接口的概念及类中的常用方法和关键字等内容进行了介绍。10.7强化练习一、选择题1.如何声明一个PHP的用户自定义类()A.classclsss_name(){}B.functionfunction_name{}C.classclsss_name{}D.functionfunction_name(){}2.如果类中的成员没有声明限定字符,属性的默认值是()A.finalB.publicC.protectedD.private3.PHP类中的$this关键字表示()A.当前类的对象B.对象的变量C.对象的方法D.当前类4.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024届山东省临沂市太平中学中考数学押题卷含解析
- 广东省东莞市虎门汇英校2024届中考二模数学试题含解析
- 2025年安全培训考试试题及参考答案(轻巧夺冠)
- 2025年新入职员工安全培训考试试题及参考答案【巩固】
- 2024-2025公司三级安全培训考试试题(5A)
- 2025各个班组安全培训考试试题附参考答案【轻巧夺冠】
- 25年公司、项目部、各个班组三级安全培训考试试题【B卷】
- 2025项目部管理人员安全培训考试试题及答案a4版
- 2024-2025新员工入职前安全培训考试试题及答案a4版
- 2024-2025企业安全管理人员安全培训考试试题及答案(必刷)
- 苹果酒的家庭做法-苹果酒的效果和作用
- 海上基本急救全套教学课件
- 安全文明施工承诺书
- 糖尿病酮症酸中毒的应急预案及护理流程
- 2024年内蒙古航开城市投资建设有限责任公司招聘笔试冲刺题(带答案解析)
- 黑龙江省佳木斯市2023-2024学年八年级下学期期中联考数学试题(无答案)
- 仿生蝴蝶飞行原理
- MOOC 唐宋诗词与传统文化-湖南师范大学 中国大学慕课答案
- 四年级数学(四则混合运算)计算题专项练习与答案汇编
- 人力资源年度个人工作总结模板(四篇)
- 餐饮设备安全培训
评论
0/150
提交评论