使用phplib template类的多在php4环境下,你写成php5格式的是否不妥“/*输出模板解析后内容,请务必使用这个函数而不是template中的parse()然后p()*/
public function pparse($target, $handle, $append = false)”
这样继承类是不妥当的,原来template提供的p、ppase方法都广泛的被使用。不能因使用你的类而对已有程序做大量修改没有看到你的类中有启动“缓存”的方法,可能是全自动的吧?但这就带来一个问题
一般使用template的程序流程为
$page = new template();
$page->set_file(); //用你的setFile方法去替换set_file方法?
...
这里是取得数据和设置模板变量的代码
...
$page->parse(); //你到这里才产生缓存文件
$page->p();

$page->pparse();
还要加多少代码才能实现缓存呢?
isCached、refresh、printCache等方法都需要显式的调用吗?
使用缓存的目的是要减少取得数据和设置模板变量及产生html代码的开销,因为数据并没有改变
如果这些代码都还需要执行,那么缓存又有什么意义呢?反倒增加了生成缓存文件的开销

解决方案 »

  1.   

    终于有人来说句话了。。to xuzuning(唠叨):1,“使用phplib template类的多在php4环境下,你写成php5格式的是否不妥”,
        确实现在php4环境使用仍然较多,但是PHP5替换PHP4的趋势是难免的,而且PHP5提供的对象模型要比PHP4的强很多而且效率上要好。
    2,“这样继承类是不妥当的,原来template提供的p、ppase方法都广泛的被使用。不能因使用你的类而对已有程序做大量修改”。
        这个类的本意是,在进行大量数据库操作的时候,如果在某段时间的需求数据是相同的,那么显然大量的数据库复杂查询不如少量的文件读取输出操作要好。但是如果数据需求是变化的,那么使用原来的Template类要好。小结一点就是:在你需要使用的时候使用,而不是整篇替换原有的。
    3,“还要加多少代码才能实现缓存呢?”
        不需要你增加代码,你只要:
    if (cacheTemplate::isCached("uniqid")) printCache("uniqid");
    else {
    //跟template中的一样
        $cacheTPL = new cacheTemplate();
        $cacheTPL->setFile("some","some.html","uniqid");
        ........    $cacheTPL->pparse("somes","some");//只有这里也就是最后输出的时候不用parse()然后p();程序中间还是可以使用的。比如模板块的解析之类的都可以用parse()
    }4,"使用缓存的目的是要减少取得数据和设置模板变量及产生html代码的开销,因为数据并没有改变
    如果这些代码都还需要执行,那么缓存又有什么意义呢?反倒增加了生成缓存文件的开销"
        解释同2
      

  2.   

    少写了点
    if (cacheTemplate::isCached("uniqid")) printCache("uniqid");
    应该是if (cacheTemplate::isCached("uniqid")) cacheTemplate::printCache("uniqid");
      

  3.   


    public function printCache($uniqID)
    {
    $cacheFile = self::$cacheDir."/".md5($uniqID);
    if (self::isCached($uniqID)) {
    $fhandle = @fopen($cacheFile, "rb");
    if ($fhandle) {
    while(!feof($fhandle)) {
    print fgets($fhandle,1024);
    }
    fclose($fhandle);
    return true;
    }
    }
    return false;
    }
    中,缓存的文件是直接输出的。那么
    if (cacheTemplate::isCached("uniqid")) printCache("uniqid");
    else {
    //跟template中的一样
        $cacheTPL = new cacheTemplate();
        $cacheTPL->setFile("some","some.html","uniqid");
    不会使输出的次序错乱吗?
    template的set_file方法是允许传入多个文件的,在此情况下你又如何做呢?
      

  4.   

    不会让顺序错乱啊,uniqid是不同的,在于你的定义,只要相同的文件使用相同的id,不同的文件的id不同,那么不会出问题的。“template的set_file方法是允许传入多个文件的,在此情况下你又如何做呢?”
    谢谢提醒,这个问题我确实没有注意到,换句话说我一直都在单文件的使用,极少用传入多个文件,呵呵。