![]() |
|
首页 │ Apache │ Linux│ Java│ MySQL│ 注册│帮助 | |||
相关问题
CODE: Ser类详解(二) 作者:axgle (二)展露头角 上回说到"文本分割法"存在的问题。我不想再就文本分割法的弊端进行阐述了。下面将直奔主题。 因为我的《Ser类详解(一)》发表后,有网友提出使用serialize的办法作为文本读写的基础。我 因此感觉到我并不孤独——正好印了那句话:“英雄所见略同”,呵呵。 是的,使用php的serialize机制,是个不错的选择。我试图表明下面的观点: 1.serialize比直接include代码效率高 2.serialize比"文本分割法"效率高 3.serialize是非常灵活与方便的 上面的三个观点,限于时间关系,我暂时不予证明(我有绝对充足的理由和证据说服你)。而目前就暂时留下反驳的余地给所有异见者好了。 我们还是接着说如何用PHP的serialize机制来达到我们的目标吧。 设想我们做一个简单的留言本,其所有的数据都保存在data.txt文件中。而起主要功能的PHP文件命名为index.php。 留言本一般是需要有‘管理员回复’功能的。但出于简单性的考虑,我们暂时不考虑它。我们的留言本将是最简单的最基础的:只是一条条的简单留言,没有其他任何复杂功能(回复,搜索,分页等)。 我们假设需要保存的数据为:title(标题),content(内容),author(作者),postdate(发表日期) 那么我们如何来保存上面的四个字段呢?考虑到PHP强大的数组(axgle注解:台湾把数组称为阵列,另外把类称为物件,我觉得这两个称呼上面的差异是意味深长的)功能,加上serialize机制能够 保存数据结构的特点,再迎合使用表结构的要求,我们可以一箭三雕的处理如下: <?php $newPost=array('ti'=>'title','co'=>'content','author'=>'axgle','postdate'=>'发表日期'); $savedata=serialize($newPost); //然后保存$savedata到data.txt文件 ?> 当需要还原显示的时候,我们可以 <?php //先从data.txt文件中读取到$savedata,然后再还原成数组... $post=unserialize($savedata); print_r($post); ?> 上面的处理似乎一点也不神奇。的确,它不过是serialize机制的简单演示(这个是讲解给不知serialize为合物的PHPer的).接下来我们要问:若增加一条新留言,那该怎么办? 很显然刚刚例子中的$newPost是个一唯数组,而我们知道二唯数组其实也是表结构。若我们要 增加一个留言,若用二唯数组,就是恰倒好处的。 我们给每条留言一个编号1,2,3...,也就是id,那么保存的留言数据的数组结构如下: <?php $table=array(1=>array('ti'=>'title1',...), 2=>array('ti'=>'title2',...), ..... ); //或者可以如下这么书写 $table[1]=array('ti'=>'title1','co'=>...); $table[2]=array('ti'=>'title2','co'=>...); .... ?> 显然,这里的ID就相当于是行号, 每一行可以保存一条留言(包括title,content,author,postdata)。 这个$table数组,就是我们所需要的‘数据结构’。显然这个数据结构是非常 直观的‘表结构’,可以很方便的用html的表格进行格式化输出。 由于我们使用id来区别不同的留言,所以我们需要一个‘ID生成器’来自动生成连续 的数字1,2,3...而这个‘ID生成器’其实就是个‘计数器’而已。 <?php class ser { var $_filename; function ser($filename) { $this->_filename=$filename.'.php';//保存数据的文件,用.php作为后缀. } function id() { $id_file=$this->_filename.'.txt';//保存当前id的txt文件 $id=@$this->_read($id_file); $id++; $this->_write($id_file,$id); return $id; } function _read($filename) { } function _write($filename,$data) { } } ?> 不难理解,在上面的不完整的演示代码中,ser类的id()方法,就是一个‘ID生成器’. 行文到这里,你还可以看出我试图把数据保存在形如'xxx.php'的文件中,而保存ID的文件恰好 是'xxx.php.txt'文件.因为我希望‘一个文件一张表’,每张表都有对应的‘ID生成器’.这是 很合理的,不是吗? 你可以就以上介绍,猜猜看若你就是现在的我,接下来要怎么做? 下回将说道如何完美的实现“add,del,edit,getData”四大功能,其中有许多的奥妙有待揭示, 尽请大家耐心期待—— |
提问者:axgle 08-18 11:11
答复

