网上面试被问的问题:PHP与HTML分离 模板很多!如smarty,templete, fasttemplete,使用这些模板就可以实现php与html代码的分离 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是PHP一个比较突出的特点之一啊。楼主怎么不知道呢? 可以用摸班或者自己做个简单MVC框架,当然还要响应做点开发工具 用smarty模板,比较官方的,也比较流行你可以告诉他自己写了一套模板在用,一定能通过,哈哈,其实也很容易,就是定义一些标记,或嵌入到html页面中,或代替一些常用的html标记如select,input等,便于程序,数据库处理。然后用程序调用包含模板标记静态页面不过smarty是基于缓存机制的,有一个templates_c的目录,生成临时文件存放,这方面还比较先进.如果自己写的话复杂一些 你告诉问你那个人~~逻辑与表现分离才是正道,而不是单纯的HTML与PHP分离老实说,现在真的不喜欢用那些所谓的模板类..现在那些模板除了缓存机制值得一看外,其他的可以扔到大海里去了... "逻辑与表现分离才是正道,而不是单纯的HTML与PHP分离"说的很好...有些人不看场合,滥用模板类,写的程序性能差到不得了,有时候真不明白,它到底用模板来干嘛。 楼上的,逻辑与表现的分开很基本的想法是分离code 和html吧逻辑与表现分离用模板来实现才是正道呀!想想你在html中写inline code的时侯,逻辑能划得比单单的code清楚吗? 逻辑与表现分离用模板来实现才是正道呀????????-------------------------------------------------------------------------------用模板了就能证明逻辑与表现分离了吗?code和html分离了就能证明逻辑与表现分离了吗?错.. "逻辑与表现分离用模板来实现才是正道呀!想想你在html中写inline code的时侯,逻辑能划得比单单的code清楚吗?"这个其实也不一定的例如:管理一个网站类目,有些人写程序喜欢这样manage_list.php?typeid=1&job=delmanage_list.php?typeid=1&job=addmanage_list.php?typeid=1&job=edit...这样,就是把所有功能用类封装,这样要实现逻辑与表现分离确实很方便,但另一种做法是用 list_add.php list_del.php list_edit.php这样的做法因为这样的东西肯定是用在后台管理的,如果封起来,对于原开发者不难理解,但对于想要维护这个程序的人来说,却要花比后者多N倍的时间去读源码.所以说MVC虽然流行,但也要看场合,如果你是在一般的小公司,我觉得用后者还实现一些,起码你走了之后,别人还能维护你的程序,相反,你的程序可能会成为过去.我觉得一个优秀的程序员不仅仅是自己能写出优秀的代码,最重要的是别人能轻松的读懂你的代码. 我一直没有觉得模版好用,模版让Html的体积变的很大,程序的运行效率变的很低,而且并没有实现干净的html和code的分离.到现在我还没有找到真正的html和code分离的方法 为什么要把PHP代码和HTML分离呢???当你在写HTML模板文件的时候,不也是需要把一些模板定义的变量写进去吗??例如 {tpl_msg}我们干吗不直接写<?=$tpl_msg?>呢???难道美工会觉得<?=$tpl_msg?>比{tpl_msg}难得多吗??你可能会说,HTML模板文件都不是PHP文件,怎么用啊?我晕......后缀干吗一定要是.tpl,.html???直接用.php不行吗?PHP本身就可以作为一种简单的模板处理机制..只要在模板里没有或尽量避免逻辑成分,就可以达到我们的目的了.... "surfchen(冲浪) "说的比较有道理在国人开发的程序中,我觉得dedecms的模板技术挺实用的,它类似XML的语法,网页设计师比较容易理解如: <dede:artlist typeid='0' titlelength='36' row='6'/> 这样 to flyonet: 没有说用了模板就是实现了逻辑与表现的分离呀,你误解了我的意思to surfchen(冲浪) 为什么要把php代码和HTML分离呢?因为就是要逻辑与表现的分离呀. 这个不用说了吧. 是的,可以<?=$tpl_msg?>,但是你如果用code inline的写法的话,那你生成这个$tpl_msg的逻辑也要放在这个页面了. code inline的做法 一,代码不好读,特别是有些时侯eaho一些html的时侯,而且总体逻辑也不够清楚 二,跟设计师不好分工 三,代码重用性不好,因为代码要兼顾页面 ... ...to ddboy: 你举的这个例子,我把我的代码贴上来吧. 我同意是一些分离是要看什么应用,因为要"重视需求",MVC也并不是所有应用的解决良方,但怎么说这也是一种思想,小应用时,我会把CV放在一起,把M分出来,像我下面贴的代码: //这里用到了修改了冰山文章系统的baselogic层,因为我用的是ADODB<?php//====================================================// FileName:MagType.Class.php// Summary: 期刊分类// Author: pwj// CreateTime: 2004-12-09// LastModifed:2004-12-09// copyright (c)2004 [email protected]//==================================================== require_once(MODEL_PATH.'BaseLogic.Class.php');class MagType extends baseLogic{/* //数据库字段描述 var $id; //主键ID var $name //名称*/ function MagType() { $this->tblName = TBL_PREFIX . "mg_type"; $this->fieldList = array("name","imageUrl","parent"); } function insertInfo($postList) { $postList['imageUrl'] = uploadFile($_FILES[imageUrl],"../images/mag/"); return $this->add($postList); } function updateInfo($postList) { if($_FILES['imageUrl']['size']>0){ $postList['imageUrl'] = uploadFile($_FILES[imageUrl],"../images/mag/"); $this->delImage($postList['id']); } return $this->update($postList); } function deleteInfo($postList) { return $this->delete($postList['id']); } function delImage($id){ $tempInfo = $this->getInfo($id); @unlink($tempInfo['imageUrl']); ## 删除原来的预览图片 }}?> //这个算是CV层<?PHPrequire_once('../configs/admin.config.php');if (!$user->isLogin()){ forward('login.php');}$magType = new MagType;$action = $_POST["action"];switch($action){ case "update": if($magType->updateInfo($_POST)){ success("更新操作成功"); } break; case "insert": if($magType->insertInfo($_POST)){ success("增加操作成功"); } break;}$action = $_GET["action"];$edit = 0; //上面编辑框是增加状态还是编辑状态switch($action){ case "edit": if(isset($_GET["id"])){ $aMagType = $magType->getInfo($_GET["id"]); $edit = 1; } else { error("参数传递错误"); } break; case "del": if(isset($_GET["id"])){ if($magType->deleteInfo($_GET["id"])){ error("删除操作成功","MagType.php"); } } break;}$smarty->assign(array('edit'=>$edit, 'aMagType'=>$aMagType, 'page'=>$magType->pageList()));require_once('end.php');因为数据库的操作都是insert,update ,delete,所以我的很多model都是inherite BaseLogic的,而且CV层的操作也都很想像,这样的文件也少了很多 to alasika(堕落人间):<?=$tpl_msg?>里的$tpl_msg 谁说要在模板里生成?这里的$tpl_msg只是提供一个数据接口~~具体数据的生成是由逻辑部分操作的.给你个例子吧~~tpl.php<h1><?=$tpl_msg?></h1>op.php<?php$one=5;$tow=6;$three=$one*$tow;$tpl_msg=$three;include("tpl.php");?>在这里,美工会对程序员说,我需要这些数据...或许,程序员对美工说,我给你这些数据..当然,这只是一个简单的例子,在具体应用中还要考虑很多..为什么到现在为止,还有人坚持HTML与PHP的分离就是逻辑与表现的分离呢?? 你们现在使用的模板..不也要求美工去遵循一定的规则吗??干吗非要美工遵循 {xxx}这样的规则???我实在不了解,为什么<?=$tpl_msg?>会比{tpl_msg}复杂.如果你没学过PHP,你会认为<?=$tpl_msg?>不适合作为模板吗??模板技术简单地来说,就是自己发明一套重复的工具....PHP已经能作为一个很好的模板工具了.我打个比喻吧~~有a事物,他一直做的是x1这件事...有b事物,他能做x2这件事..其实,a也能做x2这件事...不过由于定势的思维,每个人都会认为a只能做x1这件事..而却耗费大量的人力去创造这个b出来... 看上面to flyonet: 没有说用了模板就是实现了逻辑与表现的分离呀,你误解了我的意思 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!!to surfchen(冲浪) 为什么要把php代码和HTML分离呢?因为就是要逻辑与表现的分离呀. 这个不用说了吧.你都不看贴的 <?=$tpl_msg?>逻辑在哪? 在国人开发的程序中,我觉得dedecms的模板技术挺实用的,它类似XML的语法,网页设计师比较容易理解如: <dede:artlist typeid='0' titlelength='36' row='6'/> 这样--------------------------------------------------------------------------类似XML?俺没看过这个模板的代码,也没用过不过从这句代码来看,根本就是模仿ASP.NET的服务器控件的写法PHP本身就是很好的模板,只不过有时候直接用PHP代码写在View里面,代码有点难看.比如一个循环逻辑ASP.NET就没有什么模板,但是他的"后台代码"机制,同样把页面的显示跟逻辑的分离搞的很好 上海求职 Apache开始不了!急 请指教 谁有空的进来看看!!!!! linux下php的gd配置问题 php,js的JSON应用,请帮忙找下错误,没实验对。。。 一个正则替换的问题,请大家帮忙!~ 北京的朋友,大家都进来看一下,求助 php中怎么样才可以跳转页面?像论坛回贴后那种跳转一样? 求助有关php读取文件的问题 PHP有关下拉列表的问题。 如何获得用户登录后的网页源文件 请问这个语句有问题吗?if (!eregi("/^(?:[0-9A-Za-z]|[\x81-\xfe].)+$/",$NickName))
或者自己做个简单MVC框架,当然还要响应做点开发工具
你可以告诉他自己写了一套模板在用,一定能通过,哈哈,其实也很容易,就是定义一些标记,或嵌入到html页面中,或代替一些常用的html标记如select,input等,便于程序,数据库处理。然后用程序调用包含模板标记静态页面
不过smarty是基于缓存机制的,有一个templates_c的目录,生成临时文件存放,这方面还比较先进.如果自己写的话复杂一些
逻辑与表现分离才是正道,而不是单纯的HTML与PHP分离老实说,现在真的不喜欢用那些所谓的模板类..现在那些模板除了缓存机制值得一看外,其他的可以扔到大海里去了...
说的很好...
有些人不看场合,滥用模板类,写的程序性能差到不得了,有时候真不明白,它到底用模板来干嘛。
-------------------------------------------------------------------------------
用模板了就能证明逻辑与表现分离了吗?
code和html分离了就能证明逻辑与表现分离了吗?错..
这个其实也不一定的
例如:管理一个网站类目,有些人写程序喜欢这样
manage_list.php?typeid=1&job=del
manage_list.php?typeid=1&job=add
manage_list.php?typeid=1&job=edit
...
这样,就是把所有功能用类封装,这样要实现逻辑与表现分离确实很方便,但另一种做法是
用 list_add.php
list_del.php
list_edit.php
这样的做法
因为这样的东西肯定是用在后台管理的,如果封起来,对于原开发者不难理解,但对于想要维护这个程序的人来说,却要花比后者多N倍的时间去读源码.所以说MVC虽然流行,但也要看场合,如果你是在一般的小公司,我觉得用后者还实现一些,起码你走了之后,别人还能维护你的程序,相反,你的程序可能会成为过去.我觉得一个优秀的程序员不仅仅是自己能写出优秀的代码,最重要的是别人能轻松的读懂你的代码.
当你在写HTML模板文件的时候,不也是需要把一些模板定义的变量写进去吗??
例如 {tpl_msg}
我们干吗不直接写<?=$tpl_msg?>呢???
难道美工会觉得<?=$tpl_msg?>比{tpl_msg}难得多吗??
你可能会说,HTML模板文件都不是PHP文件,怎么用啊?
我晕......
后缀干吗一定要是.tpl,.html???直接用.php不行吗?
PHP本身就可以作为一种简单的模板处理机制..
只要在模板里没有或尽量避免逻辑成分,就可以达到我们的目的了....
在国人开发的程序中,我觉得dedecms的模板技术挺实用的,它类似XML的语法,网页设计师比较容易理解
如: <dede:artlist typeid='0' titlelength='36' row='6'/> 这样
没有说用了模板就是实现了逻辑与表现的分离呀,你误解了我的意思to surfchen(冲浪)
为什么要把php代码和HTML分离呢?因为就是要逻辑与表现的分离呀. 这个不用说了吧.
是的,可以<?=$tpl_msg?>,但是你如果用code inline的写法的话,那你生成这个$tpl_msg的逻辑也要放在这个页面了.
code inline的做法
一,代码不好读,特别是有些时侯eaho一些html的时侯,而且总体逻辑也不够清楚
二,跟设计师不好分工
三,代码重用性不好,因为代码要兼顾页面
... ...to ddboy:
你举的这个例子,我把我的代码贴上来吧. 我同意是一些分离是要看什么应用,因为要"重视需求",MVC也并不是所有应用的解决良方,但怎么说这也是一种思想,小应用时,我会把CV放在一起,把M分出来,像我下面贴的代码:
<?php
//====================================================
// FileName:MagType.Class.php
// Summary: 期刊分类
// Author: pwj
// CreateTime: 2004-12-09
// LastModifed:2004-12-09
// copyright (c)2004 [email protected]
//====================================================
require_once(MODEL_PATH.'BaseLogic.Class.php');class MagType extends baseLogic
{
/* //数据库字段描述
var $id; //主键ID
var $name //名称
*/ function MagType()
{
$this->tblName = TBL_PREFIX . "mg_type";
$this->fieldList = array("name","imageUrl","parent");
} function insertInfo($postList)
{
$postList['imageUrl'] = uploadFile($_FILES[imageUrl],"../images/mag/");
return $this->add($postList);
} function updateInfo($postList)
{
if($_FILES['imageUrl']['size']>0){
$postList['imageUrl'] = uploadFile($_FILES[imageUrl],"../images/mag/");
$this->delImage($postList['id']);
} return $this->update($postList);
} function deleteInfo($postList)
{
return $this->delete($postList['id']);
} function delImage($id){
$tempInfo = $this->getInfo($id);
@unlink($tempInfo['imageUrl']); ## 删除原来的预览图片
}
}?>
<?PHP
require_once('../configs/admin.config.php');if (!$user->isLogin()){
forward('login.php');
}$magType = new MagType;$action = $_POST["action"];
switch($action){
case "update":
if($magType->updateInfo($_POST)){
success("更新操作成功");
}
break; case "insert":
if($magType->insertInfo($_POST)){
success("增加操作成功");
}
break;
}$action = $_GET["action"];$edit = 0; //上面编辑框是增加状态还是编辑状态
switch($action){
case "edit":
if(isset($_GET["id"])){
$aMagType = $magType->getInfo($_GET["id"]);
$edit = 1;
} else {
error("参数传递错误");
}
break;
case "del":
if(isset($_GET["id"])){
if($magType->deleteInfo($_GET["id"])){
error("删除操作成功","MagType.php");
}
}
break;
}$smarty->assign(array('edit'=>$edit,
'aMagType'=>$aMagType,
'page'=>$magType->pageList()));require_once('end.php');
因为数据库的操作都是insert,update ,delete,所以我的很多model都是inherite BaseLogic的,而且CV层的操作也都很想像,这样的文件也少了很多
<?=$tpl_msg?>里的$tpl_msg 谁说要在模板里生成?这里的$tpl_msg只是提供一个数据接口~~具体数据的生成是由逻辑部分操作的.
给你个例子吧~~
tpl.php
<h1><?=$tpl_msg?></h1>op.php
<?php
$one=5;
$tow=6;
$three=$one*$tow;
$tpl_msg=$three;
include("tpl.php");
?>在这里,美工会对程序员说,我需要这些数据...或许,程序员对美工说,我给你这些数据..
当然,这只是一个简单的例子,在具体应用中还要考虑很多..
为什么到现在为止,还有人坚持HTML与PHP的分离就是逻辑与表现的分离呢??
干吗非要美工遵循 {xxx}这样的规则???我实在不了解,为什么<?=$tpl_msg?>会比{tpl_msg}复杂.如果你没学过PHP,你会认为<?=$tpl_msg?>不适合作为模板吗??
模板技术简单地来说,就是自己发明一套重复的工具....PHP已经能作为一个很好的模板工具了.我打个比喻吧~~
有a事物,他一直做的是x1这件事...
有b事物,他能做x2这件事..
其实,a也能做x2这件事...不过由于定势的思维,每个人都会认为a只能做x1这件事..而却耗费大量的人力去创造这个b出来...
to flyonet:
没有说用了模板就是实现了逻辑与表现的分离呀,你误解了我的意思
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!!
to surfchen(冲浪)
为什么要把php代码和HTML分离呢?因为就是要逻辑与表现的分离呀. 这个不用说了吧.你都不看贴的
逻辑在哪?
如: <dede:artlist typeid='0' titlelength='36' row='6'/> 这样
--------------------------------------------------------------------------
类似XML?
俺没看过这个模板的代码,也没用过
不过从这句代码来看,根本就是模仿ASP.NET的服务器控件的写法PHP本身就是很好的模板,只不过有时候直接用PHP代码写在View里面,代码有点难看.比如一个循环逻辑
ASP.NET就没有什么模板,但是他的"后台代码"机制,同样把页面的显示跟逻辑的分离搞的很好