麻辣堂|资源主站|开发论坛|在线手册
首页 Apache Linux Java MySQL 注册帮助 
PHP项目开发组是PHP开发资源网于2007组年建成立的项目开发团队,目前核心开发成员有27人, 项目协作成员8名.下设7个开发组,主要承接大/中型网站项目开发任务。

    由于开发任务较多,人员比较紧张,现面向社会招聘全职或者兼职开发人员,不管你是在校大学生,还是全职开发人员,以及SOHO都可以联系本站,我们可以长期合作,并为您带来丰厚的报酬。
  您现在的位置:PHP开发资源网 > 麻辣堂 > 详细资料
待解决
Ser类详解(二)
悬赏分:20 - 2007年08月18日


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
答复
路过。。。顺便帮顶:)
回答者:玉米づ冰冻可乐 - 瓦岗村民 8-22 09:10
我也来回答:
不管你有没有帮助我们,瓦岗寨8万村民将感谢你。。。。。

为防止灌水,您需要计算一道数学题: 答案:
34 + 51 = ? 请将计算结果填在上面

 
[]
©2007 PhpRes.COM