重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

回顾

面向对象三大特性

封装:隐藏数据实现,提供外部调用的方法

继承:实现代码的重用,提高效率

多态:方法的重载,PHP不支持多态

 

PHP继承extends

如果一个是用来被实例化的,那么尽可能的将内容私有化

如果一个类是用来被继承的,那么尽可能将内容变成受保护的

 

特殊类

最终类:final

抽象类:abstract,继承自抽象类的类必须实现抽象类中全部的抽象方法(没有方法体),如果一个类中存在一个或者多个抽象方法,那么该类必须是抽象类。

子类拥有父类同名的方法或者属性:重写(父类的私有属性会被继承但是不会被重写,私有方法不会被继承)

如果要在子类里面重写了父类的方法之后,还希望调用父类的同名方法,使用关键字parent,parent::同名方法()

 

接口

规范类的结构的,接口内容只能有常量和方法(public,没有方法体)

class A implements B,C

接口能够继承接口

 

PHP重载:属性重载和方法重载

属性重载:__set,__get,__isset,__unset

方法重载:__call,__callStatic

 

文件里能保存什么?

二进制文件或者字符串

 

想讲一个数组保存到文件里?

默认将数组保存到文件的方式

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

如果将文件的内容读出来,这时候形成的是一个字符串而已,并不是期望的数组。原因是文件只能保存字符串,不能保存数据的结构。

 

 

希望通过一种方式,将数据的结构也进行保存?

PHP提供了一种方式:能够在对数据进行保存前,将内容以及结构进行序列化,变成一个字符串,然后再进行保存。

语法:serialize(),将一个带有结构的数据转化成一个能够被标识出来的字符串

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

序列化的意义:将数据结构进行相应的保存,方便在之后需要应用数据的时候,能够还原成原来的数据结构。

 

从文件读取带“结构”的数据

file_get_contents读取数据,返回一个字符串

如果将一个带“结构”字符串转变成原来的数据结构?

unserialize()函数:将一个带有结构标识的字符串,转变成对应的数据结构

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

序列化和反序列化的意义?

提供了一种机制来保存复合数据,在以后需要使用到对应数据类型的时候,可以直接从字符串中反序列化得到。

 

对象的保存

将对象保存到文件

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

保存之后发现文件里没有任何数据,因为系统没有能力自动的将对象转化成字符串。

需要使用序列化来对对象进行处理之后再进行保存。

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

序列化后的数据

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

将对象文件反序列化

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

注意:将对象反序列化之后,发现对象所属的类和对应的属性会有变化?

当保存对象的脚本执行结束之后,所有的内存全部都被释放,包括代码区的类,当新开的脚本执行之后,读到的文件里的内容,反序列化成一个对象的时候,系统会去类空间中对应的类,发现没有对应的类,那么系统就会指定一个默认的类(__PHP_Incomplete_Class),从而得到该类的一个对象。

解决方法:在反序列化之前,将对应的类加载到代码区(内存)

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

如果当前要保存的对象里有一个外部资源的属性,那么该资源在序列化的时候,系统会认为资源是不可保存的,会转变成整型的0来存储。

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

__sleep():当对象被序列化的时候会自动调用的方法,该方法用来指定需要保存的对象的属性有哪些,返回一个数组,数组里面指定需要进行序列化的属性列表

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

将保存的对象字符串反序列化

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

自动加载可以应用于反序列化

 

 

但是数据库对象没有连接上数据库,所以该对象没有使用价值。

有没有办法在反序列化的同时,将对应的外部资源给连接上?

__wakeup():指的是在对象字符串被反序列化的时候会自动调用的方法,一般在该方法内对一些外部资源进行初始化。

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

面向对象几个常用的函数和方法

class_exists:判断一个类是否存在

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

interface_exists:判断接口是否存在

method_exists:判断方法是否存在,需要两个参数,第一个参数类的对象,第二个参数是方法名

get_class:得到对象类名

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

get_parent_class:得到父类的类名

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

 

注意:在使用函数对类进行判断的时候,也会触发自动加载函数的执行

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

自定义自动加载

通过在自动加载函数里对文件进行判断来加载不同文件夹下的对应的类文件

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

修改自动加载注册器

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

自定义自动加载原理

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

对象遍历

对象的遍历其实就是遍历对象里面的属性而已。

对象的遍历只能遍历出对象的公有属性而已

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

对象内部的数组是不能够被遍历出来的。

需求:不需要遍历对象的所有属性,只需要遍历到对象里的某个数组。

需要去实现一个接口,叫做iterator接口。

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

 

接口实现

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

以上方式只能遍历索引数组,如果想要遍历关联数组,那么以上方式就无能为力。

遍历关联数组见demo14_iterator.php

 

算法

选择排序

假设当前第一个元素已经排序好,然后记住该元素的下标,拿着这个元素与后面的其他元素进行比较,如果比较之后发现后面的元素比当前元素还要小,记住当前的最小值为后面元素的下标。每一次遍历完数组都会发现一个最小元素的下标,最后进行一次交换。

快速排序

快速排序是四种常见排序里速度最快的。

快速排序原理:拿到一个数组的第一个元素,将后面所有的元素进行遍历,发现如果比第一个元素小,则方法当前元素的左边(定义了一个数组接收),如果比第一个元素大,则放到当前元素的右表(定义另外一个数组接收),然后再按照同样的方式对左边的数组进行排序,以及右边的数组排序,知道数组的元素只有一个的情况下,就不在排序,开始往回返回排序好的数组。

重蔚自留地php学习第45天——序列化-自定义自动加载-迭代重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

代码:见demo16_quicksort.php

本文来自投稿,不代表科技代码立场,如若转载,请注明出处https://www.cwhello.com/10789.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
上一篇 2019年1月9日 12:55
下一篇 2019年1月16日 00:00

相关推荐

  • 使用PHP开发微信小程序电商平台

    随着移动互联网的发展,微信已经成为了人们生活中不可或缺的一部分。而微信小程序也越来越受到人们的关注和使用。小程序的快速发展也带来了越来越多的商机。电商平台是其中之一。 在本文中,我们将介绍如何使用PH...

    2023年5月18日
    03
  • 我来教你海淀SEO:SEO优化最核心–百度算法统计。

    绿萝算法 2022年2月19日上线,影响了10W+低质站点。 之所以叫绿萝,是因为百度大厦中有很多绿萝,用来净化空气,而互联网的空气也需要好好净化。 绿萝算法——打击买卖链接的行为,包括超链中介、出卖链接的网站、...

    2023年6月28日
    01
  • PHP涉及的英语单词!

    PHP:PHP is HyperText Proprocessor hosts:hosts文件 DNS:Domain Name Server域名服务器 load:装载 Module:模块 LoadModule:装载模块 File:文件 Match:匹配 FilesMatch:文件匹配 AddType:添加类型 appl...

    2018年4月28日
    0624
  • 在PHP中使用Memcache缓存技术提高优先队列的效率。

    随着社会的不断发展,人们对于计算机技术的要求也变得越来越高。在计算机中,队列是一种非常重要的数据结构,能够帮助我们高效地解决很多问题。然而,在实际的应用过程中,队列的效率却往往会受到一些因素的限制...

    2023年5月21日
    01
  • php如何使用PHP的SNMP扩展。

    PHP的SNMP扩展是一种使PHP能够通过SNMP协议与网络设备进行通信的扩展程序。使用该扩展可以方便地获取和修改网络设备的配置信息,例如路由器、交换机等设备的CPU、内存、网络接口等信息,也可以进行诸如开关设备端...

    2023年6月3日
    02
  • php如何使用Symfony框架。

    PHP是现在互联网开发的主流技术之一,而Symfony框架则是一种基于PHP的Web应用程序框架,它可以帮助开发人员构建高质量、可维护的Web应用程序。下面我们就来讲一下如何使用Symfony框架。一、Symfony框架简介Symfon...

    2023年6月3日
    01
  • php基本语法之运算符

    PHP基本语法 一、运算符 1、算术运算符 +、-、*、/、% 2、赋值运算符 =、+=、-=、*=、/=、%=、.= 3、比较运算符 、<、==、!=、<=、>=、===、!== 4、错误控制运算符 @ 5、自加自减运算符 ++、-- 6、字符...

    2017年9月25日 PHP自学教程
    0219
  • PHP入门指南:状态模式。

    PHP 入门指南:状态模式状态模式是一种行为型设计模式,它允许对象在不同的内部状态之间进行转换,而这些状态会触发不同的行为操作。本文将介绍状态模式的概念、实现方式以及使用场景,来帮助 PHP 开发者更好地理...

    2023年5月22日
    01

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息