PHP代码分离
所谓的代码分离 其实只是一种思路,既然是一种思路 那就意味着他是有需求的 没有需求就没有解决方案 没有方案就不存在思路。
在这之前,我们制作 PHP 程序页面的时候。都是 HTML 和 PHP 混合写在一起的。
这产生了什么样的问题,主要有两个:
//处理提交后的数据
} else {
//显示表单
}
if($_POST) {
} else {
include("post.htm");
}
<html>
<body>
<?PHP echo $a; ?>
</body>
</html> 为了方便 HTML 代码能重新回到 DW 里编辑。在这里的 echo 不含任何代码。用很小的 PHP 代码块。嵌入 HTML 码中。 这些小的代码块。基本上都只有 echo,完全不干涉 HTML 代码。 这样做的同时。提出了一个新的要求。这个被包含的页面里面。定义过的变量。需要事先知道。 这个特性。到现在各种模板引擎流行的年代。依然没有改变。这个将要被包含用于输出的页面。。我们就称为:模板 ,之后,我们只要写很纯的 PHP 程序就可以了。事先准备好这些变量,并赋好值。 然后,在我们程序执行将要结束的时候,需要输出页面时。包含这个 模板文件 进来。它就能帮我们把所有变量输出了。 这就是最基本的 代码分离 实现的手法。我们来试写一个模板文件。之前说过。模板文件要能方便的在 DW 等工具里编辑,我就用 DW 制作一个模板文件。
代码如下: <html>
<head>
<title>测试用模板</title>
</head>
<body>
<table border="1" width="600" >
<tr>
<td width="40">ID</td>
<td width="100">姓名</td>
<td>联系方式</td>
</tr>
<?PHP foreach($list as $v) { ?>
<tr>
<td><?PHP echo $v['id']; ?></td>
<td><?PHP echo $v['name']; ?></td>
<td><?PHP echo $v['link']; ?></td>
</tr>
<?PHP } ?>
</table>
</body>
</html>
这种编写方使得这个PHP 程序放到 DW 等可视化工具里编辑时。还能完整的看到原来的网页效果。 我们只要记住。这个模板需要一个名为 $list 的数组变量就可以了。
<?PHP $link = mysql_connect("localhost", "root", "qsdmt0409");
mysql_select_db("test");
mysql_query("set names gbk"); $sql = "select * from `gbook`";
$rs = mysql_query($sql); $list = array();
while($line = mysql_fetch_assoc($rs)) {
$list[] = $line;
} include("tpl.php"); ?>
这是使用模板的PHP程序。中间那里。读取数据的时候。我并没有使用输出。而是赋值到一个名为 $list 的数组变量里。读取结束后,使用 include 包含这个模板文件。 显示效果如下
function tpl( $name ) {
include($name . ".php");
}
foreach($GLOBALS as $k=>$v) $$k=$v;
include($name . ".php");
}
<?PHP function tpl( $name ) {
foreach($GLOBALS as $k=>$v) $$k=$v;
include($name . ".php");
} $link = mysql_connect("localhost", "root", "qsdmt0409");
mysql_select_db("test");
mysql_query("set names gbk"); $sql = "select * from `gbook`";
$rs = mysql_query($sql); $list = array();
while($line = mysql_fetch_assoc($rs)) {
$list[] = $line;
}
$GLOBALS['list'] = $list;
tpl('tpl');
?>
$GLOBALS['list'] = $list;
在这里,我们把我们准备好的数据。存放到 全局变量 中。 然后,在自定义函数里,通过这个全局变量,还原出变量。
但是,考虑到预定义变量。常常用于其他用途。这里还是放弃了这种做法。
foreach($data as $k=>$v) $$k=$v;
include($name . ".php");
}
while($line = mysql_fetch_assoc($rs)) {
$list[] = $line;
}
$data = array();
$data['list'] = $list;
tpl('tpl', $data);
function set_var($name = NULL, $value = NULL) {
static $data = array();
if(is_null($name)) return $data;
$data[$name] = $value;
}
我定义一个这样的函数。里面声明 $data 是一个静态变量。 静态变量,使用它的值不会消失。而会被一直保留到 PHP 运行结束。 重复运行这个函数。里面的静态变量值,不会被重新赋值。 如果变量名未指定。则返回数组。。否则 给数组新定义一个索引。并赋值为指定的值。
<?PHP function set_var($name = NULL, $value = NULL) {
static $data = array();
if(is_null($name)) return $data;
$data[$name] = $value;
} function tpl( $name) {
$data = set_var();
foreach($data as $k=>$v) $$k=$v;
include($name . ".php");
} $link = mysql_connect("localhost", "root", "qsdmt0409");
mysql_select_db("test");
mysql_query("set names gbk"); $sql = "select * from `gbook`";
$rs = mysql_query($sql); $list = array();
while($line = mysql_fetch_assoc($rs)) {
$list[] = $line;
}
set_var('list', $list); tpl('tpl');
?>
<hr />
tpl('tpl');
class tpl {
public function set_var($name = NULL, $value = NULL) {
static $data = array();
if(is_null($name)) return $data;
$data[$name] = $value;
} public function p( $name) {
$data = $this->set_var();
foreach($data as $k=>$v) $$k=$v;
include($name . ".php");
}
}
$tpl = new tpl(); $link = mysql_connect("localhost", "root", "qsdmt0409");
mysql_select_db("test");
mysql_query("set names gbk"); $sql = "select * from `gbook`";
$rs = mysql_query($sql); $list = array();
while($line = mysql_fetch_assoc($rs)) {
$list[] = $line;
} $tpl->set_var('list', $list);
$tpl->set_var('title', '这里是大标题'); $tpl->p('tpl');
现在,使用模板成了这样子。准备好要赋值的数据。赋值到指定的标记上。 只在最后 方法时,才调用模板并显示。现在看看,如果代码写成这样。给我们来带了多少好处。
PHP代码分离的更多相关文章
- 转载-使用 Feed4JUnit 进行数据与代码分离的 Java 单元测试
JUnit 是被广泛应用的 Java 单元测试框架,但是它没有很好的提供参数化测试的支持,很多测试人员不得不把测试数据写在程序里或者通过其它方法实现数据与代码的分离,在后续的修改和维护上有诸多限制和不 ...
- 使用Underscore.js的template将Backbone.js的js代码和html代码分离
这段时间在学习Require.js和Backbone.js的过程中,发现有些项目里的HTML代码都是写在View的js代码里面的,渲染的时候需要对Collection进行循环,再将HTML代码拼接上去 ...
- Webpack 代码分离
Webpack 代码分离 代码分离是 webpack 中最引人注目的特性之一. 你可以把你的代码分离到不同的 bundle 中,然后你就可以去按需加载这些文件. 总的来说, webpack 分离可以分 ...
- webpack代码分离 ensure 看了还不懂,你打我(转)
webpack异步加载的原理 webpack ensure相信大家都听过.有人称它为异步加载,也有人说做代码切割,那这 个家伙到底是用来干嘛的?其实说白了,它就是把js模块给独立导出一个.js文件的, ...
- jenkins+jacoco+ant自动化代码和应用服务代码分离场景获取远程服务的覆盖率
前提 自动化代码和应用服务代码分离.jenkins和tomcat服务器分离 思想 1.在tomcat启动javaagent监听. 2.运用其他job_B已部署的应用服务代码 3.拉取自动化代码,开始测 ...
- react-router之代码分离
概念 无需用户下载整个应用之后才能访问访问它.即边访问边下载.因此我们设计一个组件<Bundle>当用户导航到它是来动态加载组件. import loadSomething from 'b ...
- 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结
史上最全的CSS hack方式一览 2013年09月28日 15:57:08 阅读数:175473 做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我 ...
- Webpack4 splitChunks配置,代码分离逻辑
博客不知道啥时候写的了,一直在草稿箱没写完,突然感觉今年过去大半了,又没怎么写博客.写写完,有始有终 1.代码分离升级 原来项目代码分离是通过下面的配置,基于bundle-loader插件,通过rou ...
- Java&Selenium自动化测试实现页面元素、页面对象及测试代码分离
一.摘要 本篇博文将介绍自动化测试实现页面元素.页面对象及测试代码分离在自动化框架中的实现 二.解析页面元素定位信息 首先,将页面元素与实际的代码分离,首先我们将页面元素定位信息和定位表达式保存在属性 ...
随机推荐
- nyoj 116 士兵杀敌(二)【线段树单点更新+求和】
士兵杀敌(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常 ...
- hdoj 1054 Strategic Game【匈牙利算法+最小顶点覆盖】
Strategic Game Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- oracle启动
- (转)Spring整合Redis作为缓存
采用Redis作为Web系统的缓存.用Spring的Cache整合Redis. 一.关于redis的相关xml文件的写法 <?xml version="1.0" ...
- 微信小程序资料集合
一:官方地址集合: 1:官方工具:https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html?t=1476434678461 2: ...
- ASP.NET MVC- VIEW Creating Page Layouts with View Master Pages Part 4
In this tutorial, you learn how to create a common page layout for multiple pages in your applicatio ...
- freemarke之TemplateDirectiveModel详解
http://hougbin.iteye.com/blog/1457924 TemplateDirectiveModel接口是freemarker自定标签或者自定义指令的核心处理接口.通过实现该接口, ...
- swift Array 数组
// // main.Swift // swift数组 // // Created by zhangbiao on 14-6-15. // Copyright (c) 2014年 理想. Al ...
- android自定义控件之滚动广告条
在一些电子商务网站上经常能够看到一些滚动的广告条,许多软件在首次使用时也有类似的广告条,如图: 其实在github上有实现这种效果的控件,不过这东西做起来也是很简单,我们今天就来看看该怎么做. 先来看 ...
- Android开发之手势滑动(滑动手势监听)详解
Android开发之手势滑动(滑动手势监听)详解 在Android应用中,经常需要手势滑动操作,比如上下滑动,或左右方向滑动,处理手势滑动通常有两种方法:一种是单独实现setOnTouchListen ...