程序员韩顺平第九章面向对象编程_第1页
程序员韩顺平第九章面向对象编程_第2页
程序员韩顺平第九章面向对象编程_第3页
程序员韩顺平第九章面向对象编程_第4页
程序员韩顺平第九章面向对象编程_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、抽象类、接口、抽象类、接口、finalfinal、类常量、类常量面向对象相关、反射面向对象相关、反射讲师:讲师:韩顺平韩顺平PHPPHP面向对象编程面向对象编程抽象类抽象类 主讲主讲: :韩顺平韩顺平 抽象类抽象类- 为什么有为什么有? 一个小问题一个小问题,还是看个程序还是看个程序(abstract1.php)PHPPHP面向对象编程面向对象编程抽象类抽象类 主讲主讲: :韩顺平韩顺平 抽象类- 基本介绍 当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法抽象方法,用abstract 来修饰该类 抽象类。 我们看看如何把Animal做成抽象类.abstract class

2、类名类名 abstract 修饰符修饰符 function 函数名函数名(参数列表参数列表);PHPPHP面向对象编程面向对象编程抽象类抽象类 主讲主讲: :韩顺平韩顺平 抽象类- 基本介绍 抽象类是面向对象编程中一个比较重要的知识点,大家要记住两句话: 1. 用abstract 关键字来修饰一个类时,这个类就叫抽象类. 2. 用abstract 关键字来修饰一个方法时,这个方法就是抽象方法. 3. 抽象类主要用来被继承,偏重设计PHPPHP面向对象编程面向对象编程抽象类抽象类 主讲主讲: :韩顺平韩顺平 抽象类- 细节说明抽象类不能被实例化抽象类可以没有abstract方法抽象类可以有非抽象

3、方法, 成员属性和常量一旦类包含了abstract方法,则这个类必须声明为abstract 类抽象方法不能有函数体如果一个类继承了某个抽象类,则它必须实现该抽象类的所有抽象方法.(除非它自己也声明为抽象类)多级继承Agetsum,getsub,B,C等类PHPPHP面向对象编程面向对象编程抽象类抽象类 主讲主讲: :韩顺平韩顺平 抽象类- 最佳应用项目经理(小白)通过抽象类,定下规范,要求程序员实现抽象类中定下的各个方法,常见的是数据库工具类 DB.class 下: 小红MysqlDB.class 小黑OracleDB.classPHPPHP面向对象编程面向对象编程抽象类最佳实践抽象类最佳实践

4、 主讲主讲: :韩顺平韩顺平 抽象类- 练习题 abstract class Animal public function abc()echo abc;public static function abc2()echo okno;Animal:abc2();class Animalabstract public function abc();public static function abc2()echo okno;PHPPHP面向对象编程面向对象编程抽象类最佳实践抽象类最佳实践 主讲主讲: :韩顺平韩顺平 抽象类- 课堂练习题要求:1.请设计抽象类 超人 Superman 属性 名字,年龄

5、。 抽象方法run 跑, fly 飞, attack 攻击 2.然后写 蜘蛛侠 , 蝙蝠侠, 和 钢铁侠分别都继承 Superman ,并创建各自的对象实例PHPPHP面向对象编程面向对象编程接口接口 主讲主讲: :韩顺平韩顺平 接口接口- 为什么有为什么有?usb插槽就是现实中的接口。你可以把手机,相机,u盘都插在usb插槽上,而不用担心那个插槽是专门插哪个的,原因是做usb插槽的厂家和做各种设备的厂家都遵守了统一的规定包括尺寸,排线等等但是各种设备的内部结构是一样的吗?答案必然是否定的! PHPPHP面向对象编程面向对象编程接口接口 主讲主讲: :韩顺平韩顺平 接口- 基本介绍 接口就是给

6、出一些没有实现的方法接口就是给出一些没有实现的方法,封装到一起封装到一起,到某个类要到某个类要使用的时候使用的时候,再根据具体情况把这些方法写出来。语法再根据具体情况把这些方法写出来。语法:interface 接口名接口名 /方法方法不含不含 方法体方法体, 常量常量 小结:接口是更加抽象的抽象类,抽象类里的方法可以有方法体,接口里的所有方法都没有方法体。接口体现了程序设计的多态多态和高内聚 , 低偶合的设计思想。接口体现多态会举例说明PHPPHP面向对象编程面向对象编程接口接口 主讲主讲: :韩顺平韩顺平 接口- 基本使用 接口就是给出一些没有实现的方法接口就是给出一些没有实现的方法,封装到

7、一起封装到一起,到某个类要到某个类要使用的时候使用的时候,再根据具体情况把这些方法写出来。语法再根据具体情况把这些方法写出来。语法:说明: 接口的命名规范一般是 i开头,然后首字母大写比如:iXxxx 的形式,比如 iUsb 快速入门案例快速入门案例interface 接口名接口名 /方法方法不含不含 方法体方法体PHPPHP面向对象编程面向对象编程接口接口 主讲主讲: :韩顺平韩顺平 接口- 最佳实践这样的设计需求在编程中也是会大量存在的,我曾经说过,一个程序就是一个世界,在现实世界存在的情况,在程序中也会出现。我们用程序来模拟一下(interface1.php)PHPPHP面向对象编程面向

8、对象编程接口接口 主讲主讲: :韩顺平韩顺平 接口-应用场景飞机功能接口飞机功能接口( (即规范即规范)对初学者讲,理解接口的概念不算太难,难的是不知道什么时候使用接口,下面我例举几个应用场景:1.说现在美国要制造轰炸机,武装直升机.专家只需把飞机需要的功能/规格定下来即可,然后让别的人具体实现就可。PHPPHP面向对象编程面向对象编程接口接口 主讲主讲: :韩顺平韩顺平 接口- 应用场景2.说现在有一个项目经理,管理三个程序员,功能开发一个软件,为了控制和管理软件,项目经理可以定义一些接口,然后由程序员具体实现。接口接口1 1类类2 2类类1 1接口接口2 2类类4 4类类3 3接口接口3

9、3类类5 5PHPPHP面向对象编程面向对象编程接口接口 主讲主讲: :韩顺平韩顺平interface2.phpinterface 接口名接口名 extends 接口接口1,接口接口2 接口接口- 细节说明细节说明 1.接口不能被实例化接口不能被实例化 2.接口中所有的方法都不能有主体接口中所有的方法都不能有主体,图示图示: 3.一个类可以实现多个接口一个类可以实现多个接口,逗号隔开逗号隔开 4.接口中可以有属性,但只能是常量 ,默认是public, 但不能用public 显式修饰(先简单说一下) 5.接口中的方法都必须是接口中的方法都必须是public的的,默认就是默认就是public 6.

10、一个接口不能继承其它的类一个接口不能继承其它的类,但是可以继承别的接口但是可以继承别的接口public class Aa implements 接口接口1,接口接口2PHPPHP面向对象编程面向对象编程接口接口 主讲主讲: :韩顺平韩顺平 定义类的改进定义类的改进 在提出接口后在提出接口后,我们类的定义就应该更加完善了我们类的定义就应该更加完善了:class class 类名类名 属性属性; ; class class 类名类名 属性属性; ; 成员方法成员方法; ; class class 类名类名 属性属性; ; 构造方法构造方法; ; 成员方法成员方法; ; class class 类名

11、类名 extends extends 父类父类 属性属性; ; 构造方法构造方法; ; 成员方法成员方法; ; 析构方法析构方法 class class 类名类名 extends extends 父类父类 implementsimplements 接口名接口名1,1,接口名接口名2 2 属性属性; ; 常量常量 构造方法构造方法; ; 成员方法成员方法; ; 析构方法析构方法 PHPPHP面向对象编程面向对象编程接口接口 主讲主讲: :韩顺平韩顺平 实现接口实现接口 vs 继承类继承类 大家听到现在,可能会对实现接口和继承类比较迷茫了,网上也有很多帖子在讨论这个问题,那么他们究竟有什么区别呢?

12、说,一个小猴子,从妈妈那里继承了会爬树的本领,又向鸟学习了飞的本领,还向鱼学习了游泳的本领 学员先做学员先做,然然后评讲后评讲MonkeyLittleMonkeyPHPPHP面向对象编程面向对象编程接口接口 主讲主讲: :韩顺平韩顺平 实现接口 vs 继承类 php的继承是单继承,也就是一个类最多只能有一个父类,这种单继承的机制可保证类的纯洁性,比c+中的多继承机制简洁。 但是不可否认,对子类功能的扩展有一定影响.所以我们认为: (1)实现接口可以看作是对 单继承的一种补充,还有一点,继承是层级式的,不太灵活。图示,这种结构修改某个类就会打破这种继承的平衡,而接口就没有这样的麻烦,因为它只针对

13、实现接口的类才起作用。(2)实现接口可在不打破继承关系的前提下,对子类功能扩展,非常灵活类类1 1类类3 3类类2 2类类6 6类类4 4类类5 5接口实现PHPPHP面向对象编程面向对象编程finalfinal 主讲主讲: :韩顺平韩顺平 final-基本介绍final1.phpfinal1.phpfinal class 类名类名 /final 类,该类不能被继承类,该类不能被继承class 类名类名 final 修饰符修饰符 function 函数名函数名(参数列表参数列表) / final 方法,方法, 不能被重写不能被重写final 中文意思:最后的, 最终的final, 可以修饰类或

14、者方法.在某些情况下,程序员可能有以下需求:不希望父类的某个方法被子类重写(override时,可以用final关键字修饰。不希望类被继承时,可以用final修饰. 快速入门PHPPHP面向对象编程面向对象编程finalfinal 主讲主讲: :韩顺平韩顺平 final- 什么时候用 因为安全的考虑,类的某个方法不允许修改。 不希望某个类被其它的类继承。 final- 看一案例class Abc1final public function test()echo hello,ok;class Abc2 extends Abc1public function test2()echo hello,o

15、k2;$x=new Abc2();$x-test2();echo ;/调用父类的final方法$x-test();练习题练习题finalexecrise.phpPHPPHP面向对象编程面向对象编程finalfinal 主讲主讲: :韩顺平韩顺平 final- 细节说明 1.1.finalfinal不能够修饰成员属性(变量)2.final 方法不能被重写,但可以被继承.3.一般来说,final 类中不会出现final 方法,因为final类都不能被继承,也就不会去重写override final类的方法了。4.final 类 是可以被实例化的PHPPHP面向对象编程面向对象编程类常量类常量con

16、st const 主讲主讲: :韩顺平韩顺平 const-基本介绍基本用法基本用法: const 常量名常量名=值值;访问访问: 类名类名:常量名常量名; 或或 self:常量名常量名 接口名接口名:常量名常量名 常量名应全部大写,并且前面不要有常量名应全部大写,并且前面不要有$ const-快速入门案例快速入门案例 案例案例(const1.php)一个一个公司类的税率值公司类的税率值const(constant) 中文意思:常量在某些情况下,程序员可能有这样的需求:当不希望一个成员变量被修改,希望该变量的值是固定不变的。这时可以用const 去修饰该成员属性,这样这个属性就自动成为常量 ,

17、比如所得税率, 数学中的圆周率等PHPPHP面向对象编程面向对象编程类常量类常量const const 主讲主讲: :韩顺平韩顺平 const- 细节说明 常量名一般字母全部大写 : TAX_RATE ,中间可以有下划线 TAX_RATE 在定义常量的同时,必须赋初值, 比如 const TAX_RATE=1.1 const关键字前不能用public/protected/private修饰。默认是默认是public 访问常量 在类的外部 类名:常量名 接口名:常量名 在类的内部 类名:常量名 , 或者 self:常量名 常量的值在定义的时候就初始化,以后就不能修改. 常量可以被子类继承 一个常

18、量是属于一个类的,而不是某个对象的。PHPPHP面向对象编程面向对象编程类常量类常量const const 主讲主讲: :韩顺平韩顺平 const- 细节说明 讨论一下可以把什么类型的值赋给类常量?PHPPHP面向对象编程面向对象编程constconst 主讲主讲: :韩顺平韩顺平 const- 课堂练习题-然后评讲 class Company public const RATE=1.1;class Company const RATE;class Company const RATE=1.1;public function getRATE()return $this-RATE;$com1=n

19、ew Company();echo $com1-getRATE();class Companyconst RATE=1.1;public function test()Company:RATE=23;请问四个代码片段有无错误,如果有错误,说明原因,并修改PHPPHP面向对象编程相关技术面向对象编程相关技术对象克隆对象克隆 主讲主讲: :韩顺平韩顺平 对象克隆技术和分析对象克隆说明 1.基本语法 $新对象 = clone $旧对象;2.对象克隆会生成一个全新的,独立的对象。3.当复制完成时,如果定义了 _clone()方法,则新创建的对象(复制生成的对象)中的 _clone()方法会被调用。4.

20、将 _clone做成一个私有函数,防止克隆,当有克隆代码时,就会报错误 /private function _clone () 前面讲过PHPPHP面向对象相关技术面向对象相关技术对象遍历对象遍历 主讲主讲: :韩顺平韩顺平 对象遍历了解,应付笔试对象遍历只能遍历对象的属性值1.基本语法2.在类外部遍历时,只能遍历到public 属性3.如果要遍历对象的所有属性值 ,可以写一个成员方法foreach($对象 as $key = $val)echo $key = $val;foreach($this as $key = $val)echo $key = $val;PHPPHP面向对象相关技术面向

21、对象相关技术内置标准类内置标准类 主讲主讲: :韩顺平韩顺平 PHP内置标准类了解,应付笔试如果,我们希望把一些数据,以对象的属性的方式存储,同时我们又不想定义一个类,可以考虑使用 PHP内置标准类 stdClass standard标准举例举例:PHPPHP面向对象相关技术面向对象相关技术转为对象转为对象 主讲主讲: :韩顺平韩顺平 其它数据类型转对象了解,应付笔试如果,我们希望把非对象类型转成对象,可以通过如下方法实现.(object) 来强制转换1.数组转对象2.基本数据类型转对象3.null转对象说明说明: 转换后 属于 类型是什么呢?说明说明: 对象也可以转成数组,看看是什么情况?P

22、HPPHP面向对象相关技术面向对象相关技术内置标准类内置标准类 主讲主讲: :韩顺平韩顺平 PHP语法松散了解,应付笔试l当我们给一个不存在的属性赋值时,会自动的增加一个对应的public属性,(属性重载)。l如何阻止?PHPPHP面向对象相关技术面向对象相关技术序列化序列化 主讲主讲: :韩顺平韩顺平 对象序列化和反序列化对象序列化和反序列化(重点重点) 请大家思考问题?什么时候会使用到:1.当项目开发时,需要把某个或者某些对象保存日志文件 .2.当我们需要把对象放入到session中3._sleep 和 _wakeup 魔术方法PHPPHP面向对象相关技术面向对象相关技术序列化序列化 主讲

23、主讲: :韩顺平韩顺平 对象序列化和反序列化对象序列化和反序列化-课堂练习课堂练习-评评 请大家思考问题? 小作业:1.创建Student类( 名字,年龄,学校对象 )2.创建School 类(名字,地址)3.创建一个学生对象,学校对象, 并给属性赋值4.a.php把学生对象保存 c:objsstu.log5.b.php可以读取出文件,并恢复学生对象PHPPHP面向对象相关技术面向对象相关技术类与对象相关函数类与对象相关函数 主讲主讲: :韩顺平韩顺平 类与对象的相关函数和类型运算符instanceof 了解,应付笔试class_exists()method_exists()property_

24、exists()_autoload()get_class()考虑补讲 traitsPHPPHP面向对象相关技术面向对象相关技术类与对象相关函数类与对象相关函数 主讲主讲: :韩顺平韩顺平 类与对象的相 关函数和类型运算符instanceof 了解,应付笔试class_exists()method_exists()property_exists()_autoload()get_class()考虑补讲 traitsPHPPHP面向对象相关技术面向对象相关技术单例模式单例模式 主讲主讲: :韩顺平韩顺平 单例模式(面向对象编程单例模式(面向对象编程最佳实践最佳实践) 请大家看一段代码,然后思考问题所

25、在先思考: 我们在实际开发中,会有这样的需要,在一次http请求中,保证某个类的对象实例只能有一个,这样可以节省资源开销?知识点: 1. 访问权限 2 继承 3. static 4.构造函数 5. 对象克隆 6. finalheader(content-type:text/html;charset=utf-8);class dbHelperprivate $conn;public function _construct()$this-conn=mysql_connect(localhost,root,root);echo 得到一个conn;$db1=new dbHelper();$db2=ne

26、w dbHelper();if($db1=$db2)echo 一个对象;elseecho 两个对象; PHPPHP面向对象相关技术面向对象相关技术_toString_toString 主讲主讲: :韩顺平韩顺平 对象当做字符串使用了解,应付笔试_toString() 方法用于一个类被当成字符串时应怎样回应。例如 echo $obj; 应该显示些什么。此方法必须返回一个字符串,否则将发出一条致命错误。ReflectionClass 类类ReflectionClass 类报告了一个类的有关信息。思考:有时我们需要获取到一个类的相关信息,要求当我们 echo 对象名; 可以返回该类的相关信息,比如类

27、名,所有函数所有函数和所有属性所有属性等PHPPHP面向对象编程面向对象编程反射机制(扩展课程扩展课程) 主讲主讲: :韩顺平韩顺平 反射机制反射机制-基本介绍基本介绍PHP 5 具有完整的反射 API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。 此外,反射 API 提供了方法来取出函数、类和方法中的文档注释。PHP反射机制,是属于我们的扩展部分课程,在项目开发中使用很少,主要是自己开发框架可能会使用到。 因此因此,不做强制掌握要求不做强制掌握要求.PHPPHP面向对象编程面向对象编程反射机制 主讲主讲: :韩顺平韩顺平 反射机制反射机制-使用在什么地方使用在什么地方反射机制在什么情况下使用1.框架底层,比如TP框架底层的控制器调度2.扩展功能3.管理大量的未知类PHPPHP面向对象编程面向对象编程反射机制 主讲主讲: :韩顺平韩顺平 反射机制的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论