




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020/5/16,-,1,PHP面向对象编程,PHP面向对象编程,2020/5/16,-,2,主要内容,面向对象编程的基础知识PHP5中面向对象编程的基本技术PHP5中面向对象编程的高级技术,2020/5/16,-,3,面向对象编程的基础知识,什么叫面向对象(OOPObjectOrientedProgramming)起初,“面向对象”是专指在程序设计中采用封装、继承、多态等设计方法。但这个定义显然不能再适合现在情况。面向对象的思想已经涉及到软件开发的各个方面。如,面向对象的分析(OOA,ObjectOrientedAnalysis),面向对象的设计(OOD,ObjectOrientedDesign)、以及我们经常说的面向对象的编程实现(OOP,ObjectOrientedProgramming)。,2020/5/16,-,4,面向对象的基本概念,对象:对象是人们要进行研究的任何事物,它不仅能表示具体的事物还可以是抽象的事物.对象的属性和行为:对象用数据值来描述状态。行为就是操作可以改变对象的状态.类:具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,类实际上就是一种数据类型。类的属性与方法通常又统称为类的成员。,2020/5/16,-,5,面向对象的特征,封装:类定义将其说明(用户可见的外部接口)与实现(用户不可见的内部实现)显式地分开,其内部实现按其具体定义的作用域提供保护继承是指子类可以拥有父类所有的属性和方法,除了这些以外,子类自己还可以创建新的方法和属性多态:同一操作作用在不同对象上所的结果不一样,这就是多态。也就是同一函数在不同的对象中所实现的功能不一样。,2020/5/16,-,6,创建类,定义类classClassName/包含属性和方法class:关键字,说明声明了一个类ClassName:类名。满足标识符的规定,2020/5/16,-,7,创建对象,对象是通过类实例化出来的,使用new关键字来生成一个对象语法:$对象名称=new类名称();如定义了Person后,创建该类的对象$p1=newPerson();$p2=newPerson();,2020/5/16,-,8,使用对象中的成员,PHP对象中的成员有两种一种是成员属性,一种是成员方法.访问对象中的成员就要使用一个特殊的操作符“-”来完成对象成员的访问.语法:对象-属性对象-方法如:$p1-name;$p1-age;$p1-sex;$p1-say();$p2-run();,2020/5/16,-,9,$this的使用,在类的外部,访问对象中的成员,可通过“对象-成员”的形式在类的内部,访问类的成员(属性或方法),使用”$this-成员“,代表本对象的引用如:,2020/5/16,-,10,构造方法,构造方法是特殊方法。当使用new这个关键字来创建一个对象时,它将自动调用构造方法。PHP5中,构造方法的名称统一为_construct()。PHP4中如果一个方法与类同名时,这个方法将成为构造方法.与类同名的构造方法在PHP5中仍然可以用,但现在很少有人用,这样做的好处是可以使构造函数独立于类名,当类名发生改变时不需要改相应的构造函数构造方法可以给对象做初始化的工作格式:function_construct(参数).,2020/5/16,-,11,构造方法,注意:当与类同名的构造方法和_construct()同时存在时,后者优先调用有参构造方法创建对象,必须向构造方法中传参。$p=newPerson(张三,20);定义构造方法时可以给参数设置默认值,如此,可以调用无参的构造方法创建对象。,2020/5/16,-,12,析构方法,PHP5中,引入析构方法的概念,可以及时释放对象所占用的内存析构方法_destruct()该方法没有参数,也没有返回值该方法在脚本关闭或对象引用被删除前被调用析构方法可用于关闭数据库,关闭文件或其他扫尾工作function_destruct()echo对象即将销毁;,2020/5/16,-,13,封装,封装是面向对象三大特征之一,含义有两层:把对象的属性和方法结合在一起尽可能隐藏对象的内部细节,对外只保留有限的接口反映在设计上就是,封装可以保证对象以外的部分不能随意读写对象的内部数据PHP中封装涉及到的三个关键字public,protected,private,2020/5/16,-,14,类成员的可见性,为控制类成员的可见性,限定对属性和方法的访问,使用以下三种访问修饰符public表示全局,类内部外部子类都可以访问;protected表示受保护的,只有本类或子类或父类中可以访问;private表示私有的,只有本类内部可以使用;注意:只要属性前有修饰符,要把var去掉,var等同public的访问权限,2020/5/16,-,15,_set(),_get()方法应用,_set()方法:该方法有两个参数,第一个参数为要设置值的属性名,第二个参数是要给属性设置的值,没有返回值。在直接设置私有属性值的时候自动调用._get()方法:该方法用来获取私有成员属性值,有一个参数,参数传入你要获取的成员属性的名称,返回获取的属性值,该直接获取私有属性的时候对象自动调用的注意:两个方法是为了存取私有属性,如果成员属性不封装成私有的,对象本身就不会去自动调用这两个方法。,2020/5/16,-,16,继承,PHP中,只支持单重继承通过继承生成的子类,将自动拥用父类的有关属性和方法(父类中的私有成员除外)子类还可以定义自己的新属性和相应的新方法必要时,子类可重新声明父类的同名属性或重新定义父类的同名方法继承使用extends关键字classBextendsA,2020/5/16,-,17,继承,子类覆盖父类中同名的方法时,在子类里可以使用如下两个方法调用父类方法:一种是使用父类的“类名:”来调用父类中被覆盖的方法;一种是使用“parent:”的方试来调用父类中被覆盖的方法;,2020/5/16,-,18,访问修饰符-protected,protected的成员不能被该类的外部代码访问。但是该类的子类有访问权限,可以进行属性、方法的读及写操作,该子类的外部代码包括其的子类都不具有访问其属性和方法的权限。,2020/5/16,-,19,final关键字,Final可以修饰类和方法被final修饰的类不能被继承被final修饰的方法不能被覆盖,2020/5/16,-,20,static关键字,static修饰的属性是静态属性,静态属性是属于类的,不属于任何对象实例,这样的属性在内存中只有一个,多个对象共用这一个属性静态属性不可以由对象通过-操作符来访问。静态属性由类名:$静态属性来访问如:,2020/5/16,-,21,static关键字,static修饰的方法称为静态方法,静态方法只能使用静态成员,不能访问非静态成员静态方法中访问静态属性不能使用$this,而是使用self:$静态属性或是类名:静态属性非静态方法中访问静态属性也是使用self:$静态属性或是类名:静态属性类外访问静态方法可以使用类名:静态方法直接调用,也可以使用对象直接调用,2020/5/16,-,22,const关键字,PHP中定义常量使用define()函数,但在类里使用const定义常量,常量的值不能被修改在类外面使用时使用类名:常量名(没有$),方法内使用时使用self:常量名如:,2020/5/16,-,23,_toString()方法,当定义一个对象如:$a=newStudent();echo$a这时运行将报错如果在类中定义_toString()方法,输出对象引用时将自动调用该方法,并输出该方法的返回值,且_toString()方法要有return语句,2020/5/16,-,24,克隆对象,如果使用两个或多个一样的对象,可以使用clone关键字克隆出一模一样的对象如果$t1=newPerson();$t2=$t1,则对其中任何一个做属性的修改,都将影响另一个,而克隆的两个对象互不打扰PHP5中定义了一个特殊的方法_clone(),在对象克隆时自动调用,如果想克隆后改变原对象的内容,则需在该方法中重写原本的属性和方法。,2020/5/16,-,25,_call()方法处理调用错误,使用对象调用方法时,如果方法不存在,运行时程序就会退出不能继续执行如果定义了_call()方法,在试图使用对象调用不存在的方法时,就会提示调用的方法和使用的参数不存在,但程序仍可以继续执行该方法声明时包含两个参数,第一个参数是string型,是调用不存在方法的方法名(如$fname),第二个参数是array型,是调用的不存在的方法的参数(如$argus)。,2020/5/16,-,26,_autoload()函数,调用一个类的时候,必须要先将该类所在的文件引入(include“xxx.php”),如果我们在一个页里调用的类很多,那么我们不得不使用许多的include“xxx.php”。显然这样很麻烦。遇到上述情况,只要定义_autoload()函数可以帮助我们解决问题该函数不是类方法,是独立的方法,有一个string类型的参数是声明不存在类的类名,如下:function_autoload($className)include$className.php;,2020/5/16,-,27,抽象方法和抽象类,在类中没有方法体的方法称为抽象方法,即方法名后面没有大括号和具体内容,方法名后直接是分号.抽象方法使用abstract来修饰如:abstractfunctionfun1();如果类中有抽象方法,那么该类就要被abstract修饰,该类称为抽象类抽象类必须有抽象方法,但也可以有成员属性和非抽象的方法,2020/5/16,-,28,抽象方法和抽象类,抽象类是一种规范,要求子类去遵守,子类继承抽象类后,按照子类的需要将抽象类中的抽象方法实现抽象方法是作为子类重载的模板来使用,子类继承抽象类时必须将其中的抽象方法全部实现,否则子类仍然不能被实例化,2020/5/16,-,29,接口,PHP不支持多继承,为了解决该问题,引入接口的概念抽象类是一种特殊的类,接口是一种特殊的抽象类,当类中所有的方法都是抽象方法时,此时就换一种称谓,类就叫做接口接口中不能声明变量,接口中所有的成员都是public权限的,包括子类实现时也要使用public权限接口的声明interface接口名,2020/5/16,-,30,接口,接口中可以定义常量,且要赋初值。接口中所有的方法都是抽象的,所以可以将abstract去掉接口中所有方法的访问权限都是public,所以也可以将public去掉接口可以使用extends继承其他接口,2020/5/16,-,31,接口的实现,定义一个子类,使用关键字implements实现接口中的全部抽象方法一个类可以同时实现多个接口一个类既可以继承一个父类,又可以同时实现多个接口,2020/5/16,-,32,instanceof运算符,该运算符可以判断一个对象是否是一个类的实例$c=newChild;if($cinstanceofChild)echo“yes;输出yes,2020/5/16,-,33,多态,多态性是指一段程序能够处理多种类型对象的能力PHP中虽然可以实现多态,但和c+还有Java这些面向对象的语言相比,多态性并不是那么突出,因为PHP本身就是一种弱类型的语言,不存在父类对象转化为子类对象或者是子类对象转化为父类对象的问题重载和重写:PHP的同一个类中不能出现同名方法,所以所谓的重载其实和Java中的重写类似,指的是在子类中可以重新定义父类中的方法。,2020/5/16,-,34,对象串行化,两种情况我们必须把对象串行化,第一种情况就是把一个对象在网络中传输的时候要将对象串行化,第二种情况就是把对象写入文件或是数据库的时候用到串行化。串行化有两个过程,一个是串行化,就是把对象转化为二进制的字符串,我们使用serialize()函数来串行化一个对象,另一个是反串行化,就是把对象转化的字符串再转化为对象,我们使用unserialize()函数来反串行化一个对象.,2020/5/16,-,35,serialize()函数,PHP中serialize()函数的参数为对象名,返回值为一个字符串,Serialize()返回的字符串含义模糊,一般我们不会解析这个串来得到对象的信息,我们只要把返回来的这个字符串传到网络另一端或是保存到方件中即可。,2020/5/16,-,36,unserialize()函数,PHP中unserialize()函数来反串行化对象,这个函数的参数即为serialize()函数的返回值,输出当然是重新组织好的对象.,2020/5/16,-,37,_sleep()函数和_wakeup()函数,在对象串行化的时候,会调用一个_sleep()函数来完成一些睡前的事情;而在重新醒来,即由二进制串重新组成一个对象的时候,则会自动调用PHP的另一个函数_wakeup(),做一些对象醒来就要做的动作。_sleep()函数不接受任何参数,但返回一个数组,其中包含需要串行化的属性。末被包含的属性将在串行化时被忽略,如果没有_sleep()方法,PHP将保存所有属性。,2020/5/16,-,38,课堂练习,编写一个图书信息类Book。属性受保护的,包括书名bookName,作者author,价格price提供有参构造方法,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年村卫生室人员公共卫生项目知识培训考试题及答案(一)
- 2025年兽医师(病理学)基础知识考试题库与答案
- 2025年美容师理论基础知识资格考试模拟试题库及答案
- 磨损技术测试题及答案
- 2025贷款合同协议书
- 2025合同期满解除劳动合同通知范文
- 2025确保合同公平:防范家装合同中的常见风险让你无忧装修
- 2025年北京市二手交易合同
- 揭阳空港消防知识培训课件
- 金融行业点钞员面试实战模拟试题库
- 提高管床护士对患者诊疗信息的知晓度PDCA记录表
- 某园区综合运营平台项目建议书
- 孕期患者非产科手术的麻醉
- 养老机构临终关怀服务手册
- 母婴产品抖音运营方案
- GB/T 27007-2011合格评定合格评定用规范性文件的编写指南
- GB/T 23445-2009聚合物水泥防水涂料
- 职业史证明【模板】
- 文旅亲子研学基地运营合作协议
- 提高妇科手术患者术后康复相关知识知晓率妇科品管圈
- 钻具内防喷工具课件
评论
0/150
提交评论