PHP笔记:接口,自动加载机制,序列化与反序列化,对象的克隆_第1页
PHP笔记:接口,自动加载机制,序列化与反序列化,对象的克隆_第2页
PHP笔记:接口,自动加载机制,序列化与反序列化,对象的克隆_第3页
PHP笔记:接口,自动加载机制,序列化与反序列化,对象的克隆_第4页
PHP笔记:接口,自动加载机制,序列化与反序列化,对象的克隆_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

PHP接口结构,interface接口:指的是对象的公共方法也有一种接口技术,定义一个接口结构,用于限制一个类(对象)应该具备的公共方法(接口方法)!语法:使用关键字interface声明一个接口结构!声明:interfacei_Goods{ publicfunctionsayName(); publicfunctionsayPrice();}注意:接口内只能包含公共的抽象方法(不完整的方法)!使用:使一个类来实现接口内定义的所有接口方法(公共方法)实现:使用关键字implements来完成interfacei_Goods{ publicfunctionsayName(); publicfunctionsayPrice();}abstractclassGoddsimplementsi_Goods{ }classShopimplementsi_Goods{ publicfunctionsayName(){ } publicfunctionsayPrice(){ }}明显,实现接口结构的类,就包含了接口中定义的抽象方法,两个选择:1:定义成抽象类2:实现接口方法类似于抽象类,比较与接口的区别:1:抽象类与普通类之间是继承关系

普通类继承抽象类,第一,可以得到抽象类中的已有的常规成员,第二,才需要实现抽象方法(也不一定是public的)2:接口与普通类之间是实现关系

普通类实现了接口,只能将其没有实现的公共方法实现3:接口只用于定义公共的方法,而抽象类,什么都可以有典型的使用:多实现一个类,可以同时实现多个接口interfacei_a{ publicfunctionsayA();}interfacei_b{ publicfunctionsayB();}classAimplementsi_a,i_b{ }接口可以定义常量:interfacei_a{ constPAI=3.14; publicfunctionsayA();}interfacei_b{ publicfunctionsayB();}classAimplementsi_a,i_b{ publicfunctionsayA(){ } publicfunctionsayB(){ }}echoA::PAI;辨别?1:接口是不是类?

NO

可以用class_exists();判断是不是类2:PHP是单继承,怎么实现多继承?

“可以通过接口的多实现来模拟”此说法是错误的

答案:不能实现多继承类文件的载入-自动加载机制项目中如何管理大量的类的定义?典型的,每个类,独立的创建一个文件,用于保存定义该类的源代码!使用时,将该文件载入即可!此时,类文件的命名为:类名.class.php此时,面临一个类文件很多,某个功能需要使用其中部分类:如何合理方便载入?老办法:将载入类的代码,放在一起问题是:会有类的额外加载现在的载入类文件的方式是:按需加载在需要某个类时,如果该类没有被加载,则加载定义该类的类文件判断当前类是否已经加载?该类在哪个文件中?什么时机执行上面的操作?(自动加载机制来完成)此时可以使用PHP的类文件,自动加载机制完成!自动加载机制当需要一个类,但是并没有找到该类的定义,此时,PHP核心(ZendEngine)会自动尝试调用一个叫:__autoload()的函数。与此同时,会将当前所需要的类名作为参数,传递到__autoload()这个函数中默认是没有这个函数的,需要用户自己定义!因此,用户脚本需要完成定义该函数该函数应该有个形参,用于得到当前所需要的类名示例:function__autoload($class_name){ require'./'.$class_name.'class.php';}newBook;此时,输出的结果为:此时,我们只要完成该函数,利用得到的类名,将类名所对应的文件载入即可序列化,反序列化(串行化,反串行化)场景:数据的持久性保存!例如:将数据保存在文件内向文件写入数据:写入的长度=file_put_contents("文件","数据");从文件读取数据:数据=file_get_contents("文件");写入:$data='ginvip';echo'写入前的数据:<br/>';var_dump($data);$len=file_put_contents('./data.txt',$data);echo'<br/>';var_dump($len);读取:$data=file_get_contents('./data.txt');echo'读取到的数据:<br/>';var_dump($data);在数据保存时,面临一个问题:数据格式问题:PHP的数据有八种类型之多,文件只能保存字节数据(字符串)一旦数据类型不是字符串类型!就会导致数据不能原样保存,不能取得原始数据应该如何解决?任何形式的数据,都可以存储到文件中,并且,在取出来时,原样得到数据在保存与读取时,对数据进行转换与反转换!序列化,serlialize序列化:原始数据转成能够记录原始数据信息的字符串$data='ginvip';echo'写入前的数据:<br/>';var_dump($data);$ser_data=serialize($data);echo'<br/>序列化后的数据:';var_dump($ser_data);$len=file_put_contents('./data.txt',$ser_data);echo'<br/>';var_dump($len);输出结果为:反序列化,unserialize反序列化:通过序列化的字符串结果,将原始数据还原$data=file_get_contents('./data.txt');echo'读取到的数据:<br/>';var_dump($data);echo'<br/>';echo'转换后的数据<br/>';var_dump(unserialize($data));输出结果为:对象的序列化与反序列化4:在反序列化时,可以自动再次执行某些代码,从而完成某些资源的初始化通过对象方法:__wakeup();函数会在对象被反序列过程中自动调用,所负责的功能,执行反序列化(醒来之后的初始化工作)总结:__construct__destruct__sleep__wakeupPHP自动调用,用户脚本只需要定义。在特定的功能调用特定的方法以上四个方法总称为魔术方法对象的拷贝与克隆classBook{ public$author;}$b1=newBook;$b1->author='BruceLee';$b2=$b1;var_dump($b2);echo'<hr/>';$b1->author='JetLee';var_dump($b1->author);echo'<br/>';var_dump($b2->author);输出结果依次为:对象之间的赋值,只有引用传递,没有值传递保存对象的变量内,保存的不是对象本身,而是对象的标识导致的结果是,不能通过赋值的方式,使用旧对象,得到新对象对象的克隆克隆,使用一个已有对象,得到一个属性一致的新对象使用关键字clone来实现classBook{ public$author;}$b1=newBook;$b1->author='BruceLee';$b2=clone$b1;var_dump($b2);echo'<br/>';$b1->author='JetLee';var_dump($b1->author);echo'<br/>';var_dump($b2->author);输出结果为:典型的在克隆时,一定会出现某些属性是用于区分是否是克隆出来的意味着,在克隆出来新对象时,要为新对象增加一些额外的标识,才可以区分出来此时,在执行clone时,会自动调用新对象的魔术方法__clone去完成克隆对象的初始化classBook{ public$is_clone=false; public$author; publicfunction__clone(){ $this->is_clone=true; }}$b1=ne

温馨提示

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

最新文档

评论

0/150

提交评论