PHP构建缓存文件的时候,为什么不直接写成.php文件?其实这是一个应用决定结果的问题,比如你写一个数组或者变量进缓存文件,你就没必要搞那些.txt的文件来缓存,直接写这么个缓存文件: <? $a=111; ?> 然后引入它,再调用$a 多方便啊。

下面给个近期写的例子来说明吧

 $fidstr='63,49,55';

$searchcachefile='./forumdata/cache/search_index.php';

function searchcache(){
 global $db,$tablepre,$searchcachefile,$forums,$fidstr;
 $fileopen=fopen($searchcachefile,"w+");
 $num=$db->result_first("SELECT value FROM {$tablepre}statvars WHERE variable='threads' AND type='main'")-
 $db->result_first("SELECT sum(threads) FROM {$tablepre}forums WHERE fid IN ({$fidstr})");
 fwrite($fileopen,'<?'.PHP_EOL.'$fthreadsnum='.$num.';'.PHP_EOL.'$searchcache=array(');
 $fuhao2='';
 foreach ($forums as $fid => $fname){
  $query = $db->query("SELECT tid,dateline,subject FROM {$tablepre}threads WHERE fid='$fid' AND displayorder>=0 ORDER BY dateline DESC limit 10");
  $tidstr=$fuhao1='';
  fwrite($fileopen,$fuhao2.PHP_EOL."'".$fid."'=>array(");
  $threads=array();
  while($thread=$db->fetch_array($query)){
   $threads[]=$thread;
  }
  $fuhao1='';
  foreach($threads as $key => $value){
   fwrite($fileopen,$fuhao1.PHP_EOL."'".$key."'=>array(");
   $fuhao='';
   foreach($value as $k => $v){
    $v = str_replace("'","’",$v);
    fwrite($fileopen,$fuhao.PHP_EOL."'".$k."'=>'".$v."'");
    $fuhao=',';
   }
   fwrite($fileopen,PHP_EOL.')');
   $fuhao1=',';
  }
  fwrite($fileopen,PHP_EOL.')');
  $fuhao2=',';
 }
 fwrite($fileopen,PHP_EOL.')'.PHP_EOL.'?>');
 fclose($fileopen) ;
}

上面写$searchcachefile, $fidstr是为了其他地方共用变量。

如果你有心,你会看懂这个实例的,我要讲的是两点:

一是PHP_EOL常量,它在这里代表换行,在PHP文件中写换行/n,/r/n是不行的

二是$fuhao的用法,注意看  一般是这么用的:

$fuhao = ”;

foreach($a as $b){

$c .=$fuhao.$b;

$fuhao=’,’;

}

注意了,先将$fuhao初始化,然后第一次FOR循环的时候,它是空,所以第一个字符串添加过去是$b

然后下面给赋值为 ‘,’  在第二次循环的时候,因为有值了  所以第二次字符串添加的是 ,$b

一直到最后一个结束,都是添加的是 ,$b     这样你就得到个结果 $c=’1,2,3,4,5′;

是不是很方便? 没必要为符号多了而担心。需要记住的是:符号变量写在添加的内容前,符号在循环外初始并且在添加

语句后赋值。

合理利用这两点技巧,构建一个完全可以直接引用并且直接输出其中变量的值是没有一点问题的,并且第二点技巧在

很多地方都应用哦,一定要学会。

最后值得一提的是这句:$v = str_replace(“‘”,”’”,$v);
因为网站编辑器设置,显示的代码会有差异,这里是将英文状态的单引号替换成汉字的单引号。为什么要这么做?大家应该明白在PHP文件中写一个数组,是这么写的$a=array(‘key’=>’value’),这里因为key是数据库里面的字段名,它的内容是可控的,所以没必要替换。但是value呢?它在name,subject字段中都有可能出现英文的单引号。一旦这里出现个英文单引号,实际作用不用多说,不明白的可以去写个文件保存试试。所以,为了很少可能出现的情况,依然要加上这类语句。

这点说的是注意细节,尽可能多的思考到可能

有句笑话:某程序员家养两只猫,他在大门上开一大一小的两个洞,别人问原因,他说“大的是个体积大的猫进出的,小的是个体积小的猫进出的”。乍一看是很好笑,但是实际上讲的是这个程序员对程序的严谨态度。为什么?如果你为两个对象做处理(为两个猫开门洞),你会怎么做?相信大部分情况是if(……)elseif(……),至于这两个对象有什么关系?肯定有,但是不是主要条件(门洞的条件就是猫的体积大小),条件是否完全分开?(是它?不是它?)当然你可以说这样做:if(猫的身宽<=门的身宽)  ,请注意程序的流程是将条件(猫)注入,获得结果(门)。在已知的条件下,只有以猫的身宽为条件判断,最后反馈结果(这里你可以说不管什么猫,给个最大的门就行,但是程序里面是不可能这么算的,在if.elseif.里面,只有以当前条件来判断,你不可能拿不是这个判断条件里面的条件来参照)

这点说的是怎么培养自己的思维。

自由转载,转载请注明: 转载自WEB开发笔记 www.chhua.com

本文链接地址: PHP构建缓存文件->为什么不直接写成.php文件? http://www.chhua.com/web-note484

随机笔记

更多