




已阅读5页,还剩60页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux+PHP+MYSQL第 5讲 面向对象第 5讲 面向对象的 PHP OOP的好处 关键的 OOP概念 构造函数和析构函数 静态类成员OOP( Object-Oriented Programming,面向对象的编程)OOP的好处 封装 继承 多态什么是面向对象编程 面对对象技术的基本观点如下: ( 1)客观世界由对象组成。 ( 2)具有相同数据和操作的对象可归纳成类。 ( 3)类可以派生出子类,子类除了继承除了继承父类的全部特性外还可以有自己的特性 ( 4)对象之间的联系通过消息传递来维系。关键的 OOP概念 面向对象编程( Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构, OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成, OOP达到了软件工程的三个目标:重用性、灵活性和扩展性。 面向对象一直是软件开发领域内比较热门的话题,首先,面向对象符合人类看待事物的一般规律。 其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。为编程人员敞开了一扇大门,使其编程的代码更简洁、更易于维护,并且具有更强的可重用性。 PHP 是一个混合型语言,你可以使用 OOP,也可以使用传统的过程化编程 。然而,对于大型项目,你可能需要在 PHP 中使用纯的 OOP去声明类,而且在你的项目里只用对象和类 。关键的 OOP概念 面向对象编程思想的建立 关键的 OOP概念的理解掌握,这是基础例如:类、类的属性、类的方法、访问权限构造函数、析构函数等。 如何应用面向对象的编程思想主要是根据画面和系统的开发架构,源头:理解画面从何而来,目的:类设计好之后的代码如何实现。关键的 OOP概念 类类是具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。 对象 对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。 类和对象这间的关系 类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类。类描述了一组有相同特性(属性)和相同行为(方法)的对象。举例:一个装机的配置单,这个配置单就可以想象成是类 。组装的 PC机可以看作是该类的对象。将相关的变量和方法封装进一个简洁的软件组合是一种简单而强大的思想,它给软件开发人员提供了两个主要的好处:模块化 :一个对象的源代码可以独立于其他对象的源代码进行编写和维护。另外,对象很容易地在系统中传递。你可以将你的自行车对象交给其他人,而它仍然会正常工作。隐藏信息 :对象有一个公共接口,其他对象可以使用这个接口与它通信。对象可以维护私有的信息和方法,可以在任何时候改变这些信息和方法,而不影响依赖于它的其他对象。你不需要理解你自行车使用的变速齿轮机制就能够使用它。软件对象 对象属性型号价格里程行为起动停车行驶属性车轮数量档的数量行为加速换档刹车属性名称颜色品种行为摇尾巴吃东西犬 吠 关键的 OOP概念 面向对象 如果你想建立一个电脑教室,首先要有一个房间,房间里面要有 N台电脑,有N张桌子, N把椅子,白板,投影机等等,这些是什么,刚才咱们说了,这就是对象,能看到的一个个的实体,可以说这个电脑教室的单位就是这一个个的实体对象,它们共同组成了这个电脑教室,那么我们是做程序,这和面向对象有什么关系呢?开发一个系统程序和建一个电脑教室类似,你把每个独立的功能模块抽象成类,形成对象,由多个对象组成这个系统,这些对象之间都能够接收信息、处理数据和向其它对象发送信息等等相互作用。就构成了面向对象的程序。 如何抽象出一个类? 上面已经介绍过了,面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,所以我们首先要做的就是如何来声明类,做出来一个类很容易,只要掌握基本的程序语法定义规则就可以做的出来,那么难点在那里呢?一个项目要用到多少个类,用多少个对象,在那要定义类,定义一个什么样的类,这个类实例化出多少个对象,类里面有多少个属性,有多少个方法等等 ,这就需要读者通过在实际的开发中就实际问题分析设计和总结了。 (系统架构师主要是根据每个项目的页面来判断 )。关键的 OOP概念 类的定义 :class 类名 举例:人是一个对象,你怎么把一个你看好的人推荐给你们领导呢?首先,你会介绍这个人姓名、性别、年龄、身高、体重、电话、家庭住址等等。然后,你要介绍这个人能做什么,可以开车,会说英语,可以使用电脑等等。 总结:所有的对象我们用类去描述都是类似的,从上面人的描述可以看到, 做出一个类来,从定义的角度分两部分,第一是从静态上描述,第二是从动态上描述, 静态上的描述就是我们所说的属性,像上面我们看到的,人的姓名、性别、年龄、身高、体重、电话、家庭住址等等。 动态上也就是人的这个对象的功能,比如这个人可以开车,会说英语,可以使用电脑等等 。关键的 OOP概念 抽象:抽象成程序时,我们把静态的说成类的属性,把动态的写成函数或者说是方法,函数和方法。 所有类都是从属性和方法这两方面去写,属性又叫做这个类的成员属性,方法叫做这个类的成员方法。 class 人成员属性:姓名、性别、年龄、身高、体重、电话、家庭住址成员方法:可以开车, 会说英语, 可以使用电脑 属性:通过在类定义中使用关键字 “ var “来声明变量,即创建了类的属性 ,虽然在声明成员属性的时候可以给定初始值, 但是在声明类的时候给成员属性初使值是没有必要的,比如说要是把人的姓名赋上 “张三 ”,那么用这个类实例出几十个人,这几十个人都叫张三了,所以没有必要, 我们在实例出对象后给成员属性初始值就可以了。如: var $somevar;关键的 OOP概念 方法 (成员函数 ):通过在类定义中声明函数,即创建了类的方法。如: function somefun(参数列表 ) . . 关键的 OOP概念 注意:不要给初始的值,因为我们做的人这个类是一个描述信息,将来用它实例化对象,比如实例化出来 10个人对象,那么这 10个人, 每一个人的名子,性别, 年龄都是不一样的,所以最好不要在这个地方给成员属性赋初值,而是对每个对象分别赋值的。 再做一个类, 我们就做个矩形吧,先分析一下,想一想从两方面分析,矩形的属性都有什么?矩形的功能都有什么?class 矩形/矩形的属性矩形的长; 矩形的宽;/矩形的方法矩形的周长;矩形的面积;关键的 OOP概念关键的 OOP概念 如何去使用对象中的成员 ? 上面看到 PHP对象中的成员有两种一种是成员属性,一种是成员方法。 对象我们已经可以声明了, $p1=new Person();怎么去使用对象的成员呢?要想访问对象中的成员就要使用一个特殊的操作符 “-”来完成对象成员的访问:对象 -属性 $p1-name; $p2-age; $p3-sex;对象 -方法 $p1-say(); $p2-run();name=”张三 ”;$p1-sex=”男 ”;$p1-age=20;/下面三行是访问 $p1对象的属性echo “p1对象的名子是: ”.$p1-name.”;echo “p1对象的性别是: ”.$p1-sex.”;echo “p1对象的年龄是: ”.$p1-age.”;/下面两行访问 $p1对象中的方法$p1-say();$p1-run();关键的 OOP概念下面三行是给 $p2对象属性赋值$p2-name=”李四 ”;$p2-sex=”女 ”;$p2-age=30;/下面三行是访问 $p2对象的属性echo “p2对象的名子是: ”.$p2-name.”;echo “p2对象的性别是: ”.$p2-sex.”;echo “p2对象的年龄是: ”.$p2-age.”;/下面两行访问 $p2对象中的方法$p2-say();$p2-run();/下面三行是给 $p3对象属性赋值$p3-name=”王五 ”;$p3-sex=”男 ”;$p3-age=40;/下面三行是访问 $p3对象的属性echo “p3对象的名子是: ”.$p3-name.”;echo “p3对象的性别是: ”.$p3-sex.”;echo “p3对象的年龄是: ”.$p3-age.”;/下面两行访问 $p3对象中的方法$p3-say();$p3-run();关键的 OOP概念 特殊的引用 “$this”的使用 现在我们知道了如何访问对象中的成员,是通过 “对象 -成员 ”的方式访问的 ,这是在对象的外部去访问对象中成员的形式,那么如果我想在对象的内部,让对象里的方法访问本对象的属性,或是对象中的方法去调用本对象的其它方法这时我们怎么办?因为对象里面的所有的成员都要用对象来调用,包括对象的内部成员之间的调用,所以在 PHP里面给我提供了一个本对象的引用 $this,每个对象里面都有一个对象的引用 $this来代表这个对象,完成对象内部成员的调用 , this的本意就是 “这个 ”的意思,上面的实例里面,我们实例化三个实例对象 $P1、 $P2、 $P3,这三个对象里面各自存在一个 $this分别代表对象 $p1、 $p2、 $p3 。关键的 OOP概念 通过上图我们可以看到, $this就是对象内部代表这个对象的引用,在对象内部和调用本对象的成员和对象外部调用对象的成员所使用的方式是一样的 修改一下上面的实例,让每个人都说出自己的名字,性别和年龄: 关键的 OOP概念name.“ 性别: “.$this-sex.“ 我的年龄是: “.$this-age.“;function run() /这个人可以走路的方法echo “这个人在走路 “;关键的 OOP概念$p1=new Person(); /创建实例对象 $p1$p2=new Person(); /创建实例对象 $p2$p3=new Person(); /创建实例对象 $p3/下面三行是给 $p1对象属性赋值$p1-name=“张三 “;$p1-sex=“男 “;$p1-age=20;/下面访问 $p1对象中的说话方法$p1-say();/下面三行是给 $p2对象属性赋值$p2-name=“李四 “;$p2-sex=“女 “;$p2-age=30;/下面访问 $p2对象中的说话方法$p2-say();/下面三行是给 $p3对象属性赋值$p3-name=“王五 “;$p3-sex=“男 “;$p3-age=40;/下面访问 $p3对象中的说话方法$p3-say();?关键的 OOP概念 Result:我的名字叫:张三性别:男我的年龄是: 20我的名字叫:李四性别:女我的年龄是: 30我的名字叫:王五性别:男我的年龄是: 40 在 $p1、 $p2和 $p3这三个对象中都有 say()这个方法, $this分别代表这三个对象, 调用相应的属性,打印出属性的值,这就是在对象内部访问对象属性的方式, 如果相在say()这个方法里调用 run()这个方法也是可以的,在 say()这个方法中使用 $this-run()的方式来完成调用。 关键的 OOP概念 构造方法与析构方法 大多数类都有一种称为构造函数的特殊方法。当创建一个对象时,它将自动调用构造函数,也就是使用 new这个关键字来实例化对象的时候自动调用构造方法。 构造函数的声明与其它操作的声明一样,只是其名称必须是 _construct( )。这是PHP5中的变化,以前的版本中,构造函数的名称必须与类名相同,这种在 PHP5中仍然可以用,但现在以经很少有人用了,这样做的好处是可以使构造函数独立于类名,当类名发生改变时不需要改相应的构造函数名称了。为了向下兼容,如果一个类中没有名为 _construct( )的方法, PHP将搜索一个 php4中的写法 ,与类名相同名的构造方法。 格式: function _construct ( 参数 ) . . 在一个类中只能声明一个构造方法,而是只有在每次创建对象的时候都会去调用一次构造方法,不能主动的调用这个方法,所以通常用它执行一些有用的初始化任务。比如对成属性在创建对象的时候赋初值。关键的 OOP概念name赋初使值$this-name=$name;/通过构造方法传进来的 $sex给成员属性 $this-sex赋初使值$this-sex=$sex;/通过构造方法传进来的 $age给成员属性 $this-age赋初使值$this-age=$age;/这个人的说话方法function say()echo “我的名子叫: “.$this-name.“ 性别: “.$this-sex.“ 我的年龄是: “.$this-age.“;关键的 OOP概念/通过构造方法创建 3个对象 $p1、 p2、 $p3,分别传入三个不同的实参为姓名、性别和年龄$p1=new Person(“张三 ”, ”男 ”, 20);$p2=new Person(“李四 ”, ”女 ”, 30);$p3=new Person(“王五 ”, ”男 ”, 40);/下面访问 $p1对象中的说话方法$p1-say();/下面访问 $p2对象中的说话方法$p2-say();/下面访问 $p3对象中的说话方法$p3-say();?Result:我的名子叫:张三性别:男我的年龄是: 20我的名子叫:李四性别:女我的年龄是: 30我的名子叫:王五性别:男我的年龄是: 40关键的 OOP概念 析构函数 与构造函数相对的就是析构函数。析构函数是 PHP5新添加的内容,在 PHP4中没有析构函数。析构函数允许在销毁一个类之前执行的一些操作或完成一些功能,比如说关闭文件,释放结果集等,析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行,也就是对象在内存中被销毁前调用析构函数。与构造函数的名称类似,一个类的析构函数名称必须是 _destruct( )。析构
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司内训师培训课件
- 城市地下空间三维建模技术在智慧交通中的应用可行性研究报告
- 半导体芯片先进封装工艺在智能家电无线充电模块中的技术创新实践
- 基础化学试题及答案初三
- 基础会计基础试题及答案
- 综合基础试题及答案
- 2025年四川卫生人才招聘考试医学基础卫生公基笔面试题库(附答案)
- 公司信息安全培训记录课件
- 基孔肯雅热诊疗方案(2025年版)
- 2025年下半年全国教师资格证笔试试题参考答案(幼儿园保教知识与能力)
- 健康跑活动安全免责协议书
- DB11∕T 2000-2022 建筑工程消防施工质量验收规范
- 护理学科建设
- 1《中国人民站起来了》课堂实录2024-2025学年高中语文选择性必修上册
- 3银行出纳3支票
- 第二单元(教学课件)-【大单元教学】三年级语文上册同步备课系列(统编版)
- 铝加工(深井铸造)企业事故隐患排查清单
- 中国盐业集团有限公司招聘笔试题库2024
- 人教版培智一年级(上)生活语文教案
- 重庆市渝北区2024年小升初英语试卷( 含笔试解析无听力原文无音频)
- 人教版六年级数学上册全册同步练习题-附答案
评论
0/150
提交评论