1、直接写代码,将所有代码全部写在也面中(完全不推荐)
2、创建自己的描述类、控制类,在也面中仅使用各个类的成员方法来操作其数据以实现功能。(十分十分十分的推荐)
3、一个类实现一个功能,在也面中只有大量的require/include出现。(一般推荐)

解决方案 »

  1.   

    我们这面还会读取html页面,然后将特殊的地方用php来替换,达到模版的效果。代码和页面更加分离了
      

  2.   

    yorgo,我没很明白你的意思~~能说明白点吗?
      

  3.   

    跟你说,最好别嵌什么套什么的,糊涂
    例test.php
    <?
       //这里假设你做了一个数据库查询,得到了一个结果,放到一个变量中
       .
       .
       .
       $result = "this is the query result from database"
    ?>test.php3<?include "test.php"?>
    <html>
    <body>
    <table>
    <tr>
    <td><?echo $result?>
    </td>
    </tr>
    </table>
    </body>
    </html>不知道你能不能明白我所说的意思:)
      

  4.   

    我倒是不主张用太多的include/require,这样会更乱,一旦程序的规模增加,后果不堪设想,你都不知道要包含什么好~如上我所写,把一个页面分成两个,PHP部分,HTML部分~,至于类,:),生成对象,初始化,属性赋值,方法执行,太麻烦了,有点不象PHP了~
      

  5.   

    我们执行的是php的程序,这个程序会处理页面动态的部分,将结果保存到变量中.
    然后使用fopen读取我们定制好的html页面,将页面上需要现实动态结果的地方的特殊标志替换成变量中的内容.然后在统一的echo出来.如果需要生成静态页面,就直接存成html文件就行了不知道明白否?
      

  6.   

    非常喜欢 yorgo(羽高) 的模板方法。
    我就是用不熟炼。
      

  7.   

    to:羽高
    不管怎么样,思想是差不多的,不过,我还是觉得,用fopen没有一个include来的简单,我的想法源于JSP,<include "">相当于usebean,<?echo $temp?>相当于<%=temp%>,我觉得你的想法还是以php程序为中心的,用php生成HTML,我是以HTML为中心的,先得到这个HTML需要些什么,然后用php把需要的拿出来就可以了,(^_^,不才,还是认为我的方法会容易接受,也许是应用习惯了~),我也曾经设想用一个php的对象,或者xml什么的实现java的bean结构(非用php调用javabean,javabean无非也就是一个对象),不过还一直没有实现。to:楼上
    如你用了我这种方法,相信你的编程思路会更清晰
      

  8.   

    编程思路固然重要,但是不知道你有没有考虑过这样的东西。
    如果你的页面再次改版的时候,你是使用一个页面制作,还是使用一个程序员来帮助你的改版呢?固然页面制作的成本会低一些。这样做的意思想让接触页面的人员看不到html上面的php代码,这样他可以使用页面制作的工具充分的调整页面,而互动部分只是被他们认为是一种特殊的tag来看待
      

  9.   

    我觉得使用include将php代码和html代码分开是一种不错的想法,也可以实现模块化,但是很难完全做到php文件中不含html代码,看了不少的文章是用类class实现,但是仍然效果不佳,不知谁有更好的方法呢?
      

  10.   

    我的一点看法:
    如果写一个PHP完全程序的话(是指HTML代码少一些)用以上大家说的都可以,当然用函数也可以,
    如果是一些HMTL 页面经常换的话可以考虑以下方法,即用JAVASCRIPT
    <script src=moban.php?param1=参数&param2=参数2&param3=参数3>
    </script>
    在MOBAN。PHP这个程序里可以根据传入不同的参数显示不同的内容,有点像JAVABEAN的感觉,
    也可以说就是实现了JAVABEAN所能实现的功能,
      

  11.   

    我觉得使用include将php代码和html代码分开是一种不错的想法,也可以实现模块化,但是很难完全做到php文件中不含html代码,看了不少的文章是用类class实现,但是仍然效果不佳,不知谁有更好的方法呢? :)我又觉得了,嵌入式脚本是有其优越性的,如果要一点嵌入的东西都不留,我想这走向了另外一个极端,用fopen的方法不也是要在html中留一些特殊的标记么?反过来想想,你把<?echo $test?>这个东东当成一个特殊标记不可以么?我觉得改板的时候也没有什么,就让做页面的这么写嘛
    <table><tr><td>标题</td><td><?echo $title?></td></tr>
    谁都看的出这是什么意思啦,<?echo $title?>管他做页面的放到什么地方呢~:),alert()出来也可以了~JSP中应用了J2EE三层的思想,在JSP这层里,他也没有完全做到分离嘛,不也是有usebean标签,有<%=var_name%>这样的JSP标记么?如以前我说的,两种方法的区别在于,以PHP为中心还是以HTML为中心,我觉得使用无论那种服务器脚本最终结果只是要得到一个HTML页面返回给用户~。
      

  12.   

    我觉得使用include将php代码和html代码分开是一种不错的想法,也可以实现模块化,但是很难完全做到php文件中不含html代码,看了不少的文章是用类class实现,但是仍然效果不佳,不知谁有更好的方法呢? :)我又觉得了,嵌入式脚本是有其优越性的,如果要一点嵌入的东西都不留,我想这走向了另外一个极端,用fopen的方法不也是要在html中留一些特殊的标记么?反过来想想,你把<?echo $test?>这个东东当成一个特殊标记不可以么?我觉得改板的时候也没有什么,就让做页面的这么写嘛
    <table><tr><td>标题</td><td><?echo $title?></td></tr>
    谁都看的出这是什么意思啦,<?echo $title?>管他做页面的放到什么地方呢~:),alert()出来也可以了~JSP中应用了J2EE三层的思想,在JSP这层里,他也没有完全做到分离嘛,不也是有usebean标签,有<%=var_name%>这样的JSP标记么?如以前我说的,两种方法的区别在于,以PHP为中心还是以HTML为中心,我觉得使用无论那种服务器脚本最终结果只是要得到一个HTML页面返回给用户~。
      

  13.   

    看看我的想法吧:
     我是将HTML代码赋给一个变量,然后再操作的,然后INCLUDE,哈哈!真他妈的好!!!
      

  14.   

    我們常用的方法是:把HTML,JAVASCRIPT寫在一起,PHP寫在一起,然后利用一個模板類把他合並輸出,這樣的話修改界面簡單,閱讀PHP的代碼容易.是一個德國老教我們的....
      

  15.   

    介绍一个模板类..
    有高手说,其实你自己应该改写它,让它为你走得更好。 用起来非常舒服..
    <?
    /*
     * Session Management for PHP3
     *
     * (C) Copyright 1999-2000 NetUSE GmbH
     *                    Kristian Koehntopp
     *
     * $Id: template.inc,v 1.5 2000/07/12 18:22:35 kk Exp $
     *
     */class Template {
      var $classname = "Template";  // if set, echo assignments 
      var $debug     = false;  // $file[handle] = "filename"; 
      var $file  = array();  // relative filenames are relative to this pathname 
      var $root   = "";  // $varkeys[key] = "key"; $varvals[key] = "value"; 
      var $varkeys = array();
      var $varvals = array();  // "remove"  => remove undefined variables
      // "comment" => replace undefined variables with comments
      // "keep"    => keep undefined variables
      //
      var $unknowns = "remove";
      
      // "yes" => halt, "report" => report error, continue, "no" => ignore error quietly 
      var $halt_on_error  = "yes";
      
      // last error message is retained here 
      var $last_error     = "";
      //
      // public: Constructor.
      // root:     template directory.
      // unknowns: how to handle unknown variables.
      //
      function Template($root = ".", $unknowns = "remove") {
        $this->setRoot($root);
        $this->setUnknowns($unknowns);
      }  // public: setroot(pathname $root)
      // root:   new template directory.
      //  
      function setRoot($root) {
        if (!is_dir($root)) {
          $this->halt("setRoot: $root is not a directory.");
          return false;
        }
        
        $this->root = $root;
        return true;
      }  // public: set_unknowns(enum $unknowns)
      // unknowns: "remove", "comment", "keep"
      //
      //
      function setUnknowns($unknowns = "keep") {
        $this->unknowns = $unknowns;
      }  // public: setFile(array $filelist)
      // filelist: array of handle, filename pairs.
      //
      // public: setFile(string $handle, string $filename)
      // handle: handle for a filename,
      // filename: name of template file
      //
      function setFile($handle, $filename = "") {
        if (!is_array($handle)) {
          if ($filename == "") {
            $this->halt("setFile: For handle $handle filename is empty.");
            return false;
          }
          $this->file[$handle] = $this->fileName($filename);
        } else {
          reset($handle);
          while(list($h, $f) = each($handle)) {
            $this->file[$h] = $this->fileName($f);
          }
        }
      }  // public: setBlock(string $parent, string $handle, string $name = "")
      // extract the template $handle from $parent, 
      // place variable {$name} instead.
      //
      function setBlock($parent, $handle, $name = "") {
        if (!$this->loadFile($parent)) {
          $this->halt("subst: unable to load $parent.");
          return false;
        }
        if ($name == "")
          $name = $handle;    $str = $this->getVar($parent);
        $reg = "/<!--\s+BEGIN $handle\s+-->(.*)\n\s*<!--\s+END $handle\s+-->/sm";
        preg_match_all($reg, $str, $m);
        $str = preg_replace($reg, "{" . "$name}", $str);
        $this->setVar($handle, $m[1][0]);
        $this->setVar($parent, $str);
      }
      
      // public: setVar(array $values)
      // values: array of variable name, value pairs.
      //
      // public: setVar(string $varname, string $value)
      // varname: name of a variable that is to be defined
      // value:   value of that variable
      //
      function setVar($varname, $value = "") {
        if (!is_array($varname)) {
          if (!empty($varname))
            if ($this->debug) print "scalar: set *$varname* to *$value*<br>\n";
            $this->varkeys[$varname] = "/".$this->varName($varname)."/";
            $this->varvals[$varname] = $value;
        } else {
          reset($varname);
          while(list($k, $v) = each($varname)) {
            if (!empty($k))
              if ($this->debug) print "array: set *$k* to *$v*<br>\n";
              $this->varkeys[$k] = "/".$this->varName($k)."/";
              $this->varvals[$k] = $v;
          }
        }
      }  // public: subst(string $handle)
      // handle: handle of template where variables are to be substituted.
      //
      function subst($handle) {
        if (!$this->loadFile($handle)) {
          $this->halt("subst: unable to load $handle.");
          return false;
        }    $str = $this->getVar($handle);
        $str = @preg_replace($this->varkeys, $this->varvals, $str);
        return $str;
      }
      
      // public: psubst(string $handle)
      // handle: handle of template where variables are to be substituted.
      //
      function psubst($handle) {
        print $this->subst($handle);
        
        return false;
      }  // public: parse(string $target, string $handle, boolean append)
      // public: parse(string $target, array  $handle, boolean append)
      // target: handle of variable to generate
      // handle: handle of template to substitute
      // append: append to target handle
      //
      function parse($target, $handle, $append = false) {
        if (!is_array($handle)) {
          $str = $this->subst($handle);
          if ($append) {
            $this->setVar($target, $this->getVar($target) . $str);
          } else {
            $this->setVar($target, $str);
          }
        } else {
          reset($handle);
          while(list($i, $h) = each($handle)) {
            $str = $this->subst($h);
            $this->setVar($target, $str);
          }
        }
        
        return $str;
      }
      
      function pparse($target, $handle, $append = false) {
        print $this->parse($target, $handle, $append);
        return false;
      }
      
      // public: getVars()
      //
      function getVars() {
        reset($this->varkeys);
        while(list($k, $v) = each($this->varkeys)) {
          $result[$k] = $this->varvals[$k];
        }
        
        return $result;
      }
      
      // public: getVar(string varname)
      // varname: name of variable.
      //
      // public: getVar(array varname)
      // varname: array of variable names
      //
      function getVar($varname) {
        if (!is_array($varname)) {
          return $this->varvals[$varname];
        } else {
          reset($varname);
          while(list($k, $v) = each($varname)) {
            $result[$k] = $this->varvals[$k];
          }
          
          return $result;
        }
      }
      
      // public: get_undefined($handle)
      // handle: handle of a template.
      //
      function getUndefined($handle) {
        if (!$this->loadFile($handle)) {
          $this->halt("get_undefined: unable to load $handle.");
          return false;
        }
        
        preg_match_all("/\{([^}]+)\}/", $this->getVar($handle), $m);
        $m = $m[1];
        if (!is_array($m))
          return false;    reset($m);
        while(list($k, $v) = each($m)) {
          if (!isset($this->varkeys[$v]))
            $result[$v] = $v;
        }
        
        if (count($result))
          return $result;
        else
          return false;
      }  // public: finish(string $str)
      // str: string to finish.
      //
      function finish($str) {
        switch ($this->unknowns) {
          case "keep":
          break;
          
          case "remove":
            $str = preg_replace('/{[^ \t\r\n}]+}/', "", $str);
          break;      case "comment":
            $str = preg_replace('/{([^ \t\r\n}]+)}/', "<!-- Template $handle: Variable \\1 undefined -->", $str);
          break;
        }
        
        return $str;
      }  // public: p(string $varname)
      // varname: name of variable to print.
      //
      function p($varname) {
        print $this->finish($this->getVar($varname));
      }  function get($varname) {
        return $this->finish($this->getVar($varname));
      }
        
      //
      // private: filename($filename)
      // filename: name to be completed.
      //
      function fileName($filename) {
        if (substr($filename, 0, 1) != "/") {
          $filename = $this->root."/".$filename;
        }
        
        if (!file_exists($filename))
          $this->halt("filename: file $filename does not exist.");    return $filename;
      }
      
      // private: varname($varname)
      // varname: name of a replacement variable to be protected.
      //
      function varName($varname) {
        return preg_quote("{".$varname."}");
      }  // private: loadfile(string $handle)
      // handle:  load file defined by handle, if it is not loaded yet.
      //
      function loadFile($handle) {
        if (isset($this->varkeys[$handle]) and !empty($this->varvals[$handle]))
          return true;    if (!isset($this->file[$handle])) {
          $this->halt("loadfile: $handle is not a valid handle.");
          return false;
        }
        $filename = $this->file[$handle];    $str = implode("", @file($filename));
        if (empty($str)) {
          $this->halt("loadfile: While loading $handle, $filename does not exist or is empty.");
          return false;
        }    $this->setVar($handle, $str);
        
        return true;
      }  //
      // public: halt(string $msg)
      // msg:    error message to show.
      //
      function halt($msg) {
        $this->last_error = $msg;
        
        if ($this->halt_on_error != "no")
          $this->haltMsg($msg);
        
        if ($this->halt_on_error == "yes")
          die("<b>Halted.</b>");
        
        return false;
      }
      
      // public, override: haltmsg($msg)
      // msg: error message to show.
      //
      function haltMsg($msg) {
        printf("<b>Template Error:</b> %s<br>\n", $msg);
      }
    }
    ?>
      

  16.   

    to zxyufan
    <PHP高级编程>
    有一章简单的介绍了 fast.template.class
    的用法,先参详一下都在看这个类,更加一目了然了。
      

  17.   

    to alula: 没有找到《PHP高级编程》这本书,能否举例讲解一下这个模板类的用法。我觉得这个模板类的编程思想和羽高的方法是一样的,只不过它用了类封装,不知道我说的对不对?
      

  18.   

    to kongming:
    也许你是对的,用这个类可以打到羽高所说的"达到模板的效果"。模板几乎可以实现php代码和html代码的完全分离。
    由于某种原因,我被逼的放弃使用模板技术。 呵呵  也被逼的对PHP兴趣大减。我现在开始学习java啦。
    想要很好了解,还是要多翻书或相关资料的。也不知道这个例子是不是有帮助的。<!-- 模板文件main.htm -->
    <html>
    <head>
    <title>{TITLE}</title>
    </head>
    <body>
    {CONTENT}
    </body>
    </html><!-- 模板文件table.htm -->
    <table border="0" width="100%" cellspacing="1" cellpadding="1">
    <!-- BEGIN row -->
    <tr>
    <td align="center">{i}</td><td align="center">{result}</td>
    </tr>
    <!-- END row -->
    </table>
    <?
    //: generate.php
    //  php代码部分require "template.inc";
    $tpl = new Template(".");
        
    $tpl->set_file(array(
        "table" => "table.htm",
        "main"  => "main.htm"
    ));
    $tpl->set_block("table", "row", "ROWS");for($i = 0; $i < 16; $i++) {
        $result = pow(2, $i);
        
        $tpl->set_var(array(
            "EXPONENT"  => $i,
            "RESULT"    => $result
        ));
        $tpl->parse("ROWS", "row", true);
    }$tpl->parse("CONTENT", "table");
      
    $tpl->set_var("TITLE", "abc");$tpl->parse("GLOBAL", "main");
    $tpl->p("GLOBAL");?>