封装复杂数据类型

封装复杂数据类型

数字和字符串可以在被格式化然后输出,或不作修改地保存在文件或数据库中。更复杂的数据类型(数组和对象)也可以存储,不过这通常需要一些高级的格式化技巧,或者需要利用数据库中的多条记录来存储(一条记录对应数组中的一个元素)。这个内容在技巧10-6中作过介绍,其中一个函数生成了多个数组,另一个函数采用HTML表结构表示所生成的数据。

不过,使用用户自定义的函数将数组和对象转换为可以存储在数据库或文件中的数据,这并不是最简捷的解决方案。在这方面内置函数serialize()和unsearialize()就能派上用场。这些函数可以将数组或对象转换为一个字符串表示,它可以存储在数据库(或文件)的一个列中,而且以后能获取并转换为原来的数据类型。

serialize()函数取一个PHP变量,将其转换为一个字符串表示,unserialize()函数取一个字符串(通常由serialize()创建),并将其转换为原来的类型。

说明    资源类型的变量不能串行化。这些变量包含由引擎创建和维护的数据,所有其他类型都可以串行化。

代码

工作原理

这个例子使用serialize()函数将一个数组的内容转换为一个字符串。这个字符串将打印,然后转换为一个新的数组,这个新数组中将增加一个新元素。

数据库驱动的网站通常采用某种方式设计,从而能获取和表示数据库中存储的内容而没有太多格式化设置。根据数值数据和数值处理创建一个网页时,如果能缓存结果,以便下一个可能请求相同网页的用户更容易地访问和表示,这会很有用。为此,可以串行化结果,将其保存在数据库或一个文件中,然后在生成新网页之前先检查是否已经存在一个缓存的版本。

下一个例子展示了如何建立一个类,在请求之间缓存一个值数组(即缓存一个值数组供多次请求使用)。这个类使用的是文件,不过可以很容易地修改为将值保存在一个数据库中。这个缓存类存储在一个包含文件(cache.inc)中,从而可以用于许多不同的应用程序中。

表10-7列出了这个缓存类的方法。

表10-7  缓存类方法

名    称

描    述

__construct()

类构造函数,用于初始化属性

Check()

检查缓存文件是否存在,以及是否仍有效

Save()

将缓存值写入文件

SetValue()

增加或更新缓存中的值

GetValue()

获取缓存中的一个值

代码

工作原理

在下面的例子中使用了这个缓存类,其中由缓存类创建了一个缓存对象,并查看文件是否存在。如果文件不存在,则计算值,并存储在缓存中。如果缓存数据已经存在而且有效,则获取这些数据并显示。

代码

工作原理

第一次执行这个脚本时,输出可能如下:

第二次执行时,从缓存获取值的输出如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值