面向对象源码笔记模版day4php_第1页
面向对象源码笔记模版day4php_第2页
面向对象源码笔记模版day4php_第3页
面向对象源码笔记模版day4php_第4页
面向对象源码笔记模版day4php_第5页
已阅读5页,还剩153页未读 继续免费阅读

下载本文档

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

文档简介

PHP面向对象编程1PHP是同时支持面向对象和面向过程的编程语言!传统的面向过程的编程思想总结起来就八个字——自顶向下,逐步细化大家以来播客报名学习这件事情,可以分成哪些步骤insertinto登记表 等学生信息updateupdate学生表set班级第二步:学生缴费,update学生表Money减少,更改缴费字段状态update机构表Money增加、提出提供缴获得分配增加比如一个人的属性有:身高、体重、三围、、、学历、 一个的属性有:价格、品牌、操作系统、颜色、尺寸等属性 、学历、话、Money金额等功能(能做什么):属性 、学历、话、Money金额、工号等功能(能做什么):功能(能做什么):功能(能做什么):教师、 、能发工Money功能(能做什么):等学生教师班级所以,面向对象所以,面向对象 思想是123,从前期开发的角度来看面向对象比面向过程要更复杂但是从和扩展的角度来看,42对象,objectOOPPHP中,采用类(class)类其实就是得到对象的法而已!只不过大部分面向对象的语言都是通过来产生对象,phpPHP中,要想得到对象,必须先有所以,OOP中的对象也都应该有一个类!写代码,会教书;另一个对象(人类)可能叫,女,会演戏,会唱歌!class(((属性(变量方法(函数类常量(常量12,需要对成员(属性和方法)一下才可以使用private,定义方法的时候,可以省略控制修饰符,默认为publicvarnew来完成的!对象如何(操作)其中的成员呢?利用箭头来! 无论在任何地方(包括类内和类外)对象的成员,都应该先找到该对象才行3$this$this4OOP5new一个对initnew在实例化一个对象的时候,PHP系统会自动的调用一个名字叫作construct()的方法,我们init改名为construct注意:PHP早期的版本中,构造方法有一个比较老的语法,就是使用于类名同名方法作当两个构造方法同时存在的时候,真正起作用的是construct方法!6是在一个对象“”的时候由系统自动调用的!析构方法的名字叫destruct()1应该是在对象销毁之前调用的,也就是在对象即将还未的时候调用!因为析构方法中的$this还可以使用!2,对象有几种情况unset改变对象变量的值的时候,该对象也会有一个常见的删除一个对象的方法:$对象变量123PHP7也就是对象间的赋值或!__cloneStudent类中的一个实例呢?instanceof运算符来进行判断!instanceof8MySQLDBMySQLDB类,该类可以当成一个工具类13MySQLDB是该类的名字,class(定义相关的类,类就是实体(对象)实例化出相关的对象(实体对象成员的符:-三,方法中的$this是一个伪对象,代表当前对象(谁调用这个方法谁就是当前对象类和对象的形式:属性由对象来管理,方法由类来管理OOP完成报名过程新对象进行初始化操作,construct()构方法释放该对象所占用的额源对象的值传递和传递效果是完全一样clone八,MySQLDB第9 所以,我们应该由类来或操作静态成员,因为所有的对象都属于某个类!static既然静态属性由类来进行管理,所以也应该由类来进行,语法形式为:self如果是在某一个类的内部,静态成员的时候,可以使用关键字self来代替当前的类名self10也是所有的对象所共享的方法也是由类来进行管理也是在的时候增加static关键字TestTest因为静态方法和非静态方法在内存的机制其实是一样的也就导致了二者之间其实并有太大的本质上的区别!(无论采用什么方式调用静态方法,都不可以使用$this关键字!因为$this本身就体现了各个对象“独自占用”方法的含义!也就是说,如果想使用$this关键字,只能用非静态方法!那就是类调用静态方法,由对象调用非静态方法!切记11const来定义!const=值5它们在内存中的机制如下1212PHP在执行的时候,如果发现需要一个类(只要是和这个类相关的任何的操作个名字叫作autoload($class_name)函数,调用的时候,会给该函数传递一个参数,该参数一般的,系统默认的自动加载函数就是autoload(),但是随着项目规模的扩大,有可能出f11,一定要发生在需要某个类之前2,可以多个自动加载函数,在载入成功之前,会依次的按 f1f2f3f3f2,f2依然没有f1,最后才找到:3autoload函数就失效了!如果想继续生效,需要重新!现在,我们需要将上面的autoload方法成自动加载方法此时,该静态方法的参数形式为:此外,静态方法的时候,还有一个更加简单的语法形式,参数可以直接写为13序列化主要解决数据的持久化的问题对象也是一种数据类型,既然是数据,就也存在被持久化的问题当PHP运行结束之后,所有的资源都会,其中自然包括内存中的数据,如果想实现数据的持久化,就应该在运行结束之前进行持久化!,的自动转换,也就是说,只要当初保存的数据不是字符串类型的时候都有可能出现问,为什么反序列化之后类名变成 在对象的中引入相关的类文件就行了link属性(原始保存的是数据库的连接资源) MySQLDB.class.php: 14 黄种OOP代码中,也一样要体现出类与类之间的共性与个性关系,我们就是通过ABAB类,同时OOP中的代码重用的特性!此时,BookPhoneGoods类所定义的所有的成员信息!这里的成员信息就此时,上面的$b是不是Goods类实例化出来的对象呢?比如:BAAB类!扩展:(C++在在Book类中没找到showName()再从BookBook15override此时通过子类实例化出来的对象相关成员的时候真正其作用的是子类中定义的成员showName方法还在不在?调用调用showName()Book就不会继续往其父类查找了!父类名::2parentparentparentstaticselfstatic方法:类名::静态方法名可以使用类来静态方法和非静态方法也可以使用对象来静态方法和了二者之间的区别在语法上只有一个,那就是静态方法中不能使用$this关键定义方式:const=值调用方式:类名::类的5个成员在内存中的机制系统默认的自动加载函数第二步:将这个普通函数成类文件的自动加载函数,使对象在序列化的时候应该指定需要被序列化的属性,通过魔术方法sleepwakeup来实现的继承的本质不是将父类的代码到子类而是通过继承链条找到相应的父类成员名::parent关键字来代替!第16讲控制修饰所谓的控制修饰符,主要作用是控制类的成员(属性和方法,不包括类常量,在哪些地方可以被,在哪些地方不可以被的一种机制!在在PHP中,一共有三 范围的概念所以所以 控制修饰符也一共有三个public:公共的,当前类内,继承链类内和类外都可以被到思考:如何选择控制修饰符1,当子类重写父类成员的时候,子类的控制修饰符不能低于父类的控制修饰的访父类 父类 子类:可以是public也可以是217MySQLDBMySQLDBMySQLDB18final产生了两个产生了两个 finalfinalfinal所以,final另外,finalfinal关键字!此时,该方法就是最终方法!第19 妖怪类:概念太模糊,也很抽象! 来一个类为抽象类,此时,该抽象类中应该具有抽象方法!多 1220interfacePHP中定义一个接口,其实就是一种纯粹的规范或规定,规定该接口的下级类必须要实接口常量:抽象方法:必须为public(与抽象类不同,抽象类还可以为interface来定义的:I开头!1,接口中的抽象方法不需要写 他的普通成员,只能有抽象方法不能有普通方法,所以不会!2implements当一个类“实现”一个当一个类“实现”一个 ,也只有两种选择结构,但是接口中的抽象方法必须为public型!2PHP不支持多继承,但是支持多实现,也就是说,一个类可以同时“实现”多个接口!21overloadPHPPHP指的是对不可的成员的处理方式,称之为成员的重载这里的不这里的不 有两种情况12,该成员存在,但是受控制的限制(比如为private,类外就不可当然,以上只是系统默认的行为,php对不可的成员的时候,是可以采取相关的操22(上就是当一个不可的属性的时候的一种处理机制PHP44当为不可的属性赋值的时候当获取不可的属性的值的时候当删除一个不可的属性的时

当判断一个不可的属性是否存在的时

一旦加入set方法,当为一个不可的属性赋值的时候,处理权就交给用户自己了!一个是该不可的属性的名字一个是为该不可的属性赋的值122行代码只是触发了set222行代码的赋值操作有没有成功?没有,因为set方法什么都没做!一旦加入了get()方法,对不可的属性赋值的时候,就会触发该魔术方法的自动执行,在实际的应用中,set和get往往是成对出现的,往往利用它们批量的对对象的私有属性23(下一般来说,当删除一个不可的私有属性的时候,系统默认的行为是报错但是一旦加入了unset方法,则当删除一个不可的属性的时候,会自动触发该方法的该魔术方法同样需要一个参数,就是这个不可的属性的名字当判断一个不可的属性是否存在的时候,会自动触发该方法的执行24处理不可的方法的一种机制当调用一个不可的非静态方法(对象方法)的时候,会自动触发该方法的执行!方法名:string12当调用一个不可的静态方法(类方法)的时候,会自动触发该魔术方法的执行!参数的形式和call是一样的!f1:112233一、控制修饰符:就是控制类的成员在哪可以在哪不能的一种机protected:受保护的,当前类内和继承链类内可以,类外不能当子类重写父类成员的时候子类的控制权限不应该低于父类的控制权MySQLDB仅可能的将其成员三、final类和最终方法 五、interface需要使用关键字PHP不支持多继承,但是支持多实现,也就是一个类可以同时实现多个接口六、overload重载25autoload 回顾一回顾一 函数之所以函数的调用形式是将一个对象当成一个函数来调用那是因为闭包对象里面就 此时,可以定义toString魔术常量: 要注意其与self的区别self是指该类本(类是一种结构是有机的一个整体而CLASS 还有一个魔术常量:FUNCTION261,$this是不是代表当前代码所在类直接实例化出来的对象不是,$this代表当前对象,而当前对象不一定是其代码所在的类直接实例化出来的对象,所以,$this要根据执行环境来决定,也是执行上下文!2,self是不是代表其当前代码所在的类的类名?showIDBook类来调用的,从业务逻辑上来说,代码执行的时候,selfBook类才对!所以,为了解决上面的问题,PHP又增加了一个可以代表“当前类”的一个关键字!1self2(绑定“当前类”的时机就不应该发生在代码的预编译阶段,而应该发生在代码staticstatic关键字的意义:123,代表“当前类,不过,绑定当前类的实际,推后期代码执行阶段的时27我们无法用户去new对象,只能让用户new对象的时候不生效!new所以,我们只需要构造方法即可1因为此时还不存在任何的对象,只能由类来这个方法2因为这个方法本来就是需要在类行调用以得到一个对象n次调用这个方法的时候,返回刚才第一次实例化出来的对象12因为目前还是只能由类来方法这个属性(因为还没有对象由于在克隆的时候需要触发clone

__clone以上,就是实现单例模式的典型的方法,也叫作“三私一公28MySQLDBMySQLDB293031如果现在想遍历的是$stupartner属性(也是一个数组,应该怎么办?foreach51reset23current4key,nextforeachforeach是为值变量$valuecurrent(数组名为键变量$keykey(数组名next(数组名foreach(就是对值变量和键变量的foreach“(implements) tor的系统预定义接口,那么在使foreachforeach32PHP目前(PHP5,PHP对类型约束支持的不是很好,只支持两种类型约束:33 34C#PHP是在教新的版本(php5以后)中才开始使用!但是 3.2版本以后就使用了命名空间可以,放在不同 下即可 ,中functionA();classB;constC;functionA();classB;constC; functionA();functionA();classB;classB;constC;constnamespace空

温馨提示

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

最新文档

评论

0/150

提交评论