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自动化测试实现页面元素、页面对象及测试代码分离
一.摘要 本篇博文将介绍自动化测试实现页面元素.页面对象及测试代码分离在自动化框架中的实现 二.解析页面元素定位信息 首先,将页面元素与实际的代码分离,首先我们将页面元素定位信息和定位表达式保存在属性 ...
随机推荐
- Overview of the Packages JAXP
The SAX and DOM APIs are defined by the XML-DEV group and by the W3C, respectively. The libraries th ...
- JAVA基础英语单词表(下)
quantity / 'kwɔntiti / 量,数量 query ...
- 升级OpenSSH详细步骤
由于系统扫描到OpenSSH版本太低,所以需要将其升级到高版本.网上搜罗数个文章,都多多少少有点疏漏.加上自己之前没升级过SSH,参考好几个文章查缺补漏才升级成功,着实废了不少劲儿.所以综合一下前辈们 ...
- Unicode与 utf8的互相转换
<?php function unicode_encode($name) { $name = iconv('UTF-8', 'UCS-2', $name); $len = strlen($nam ...
- PAT 1026. Table Tennis
A table tennis club has N tables available to the public. The tables are numbered from 1 to N. For ...
- iOS性能优化中的离屏渲染
GPU屏幕渲染有以下两种方式: On-Screen Rendering意为当前屏幕渲染,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行. Off-Screen Rendering意为离屏渲染 ...
- Java_Web 连接池
对于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式正是为了解决资源的频繁分配﹑释放所造成的问题.为解决我们的问题,可以采用数据库连接池技术.数据库连接池的基本思想就是为 ...
- android82 启动Actvity和Activity的生命周期
package com.itheima.jump; import android.net.Uri; import android.os.Bundle; import android.app.Activ ...
- jquery刷新iframe页面的方法
1,reload 方法,该方法强迫浏览器刷新当前页面. 语法:location.reload([bForceGet]) 参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里取当 ...
- javascript 之闭包-理解不了来找我
1,闭包是什么 (百度百科定义)--闭包是可以包含自由(未绑定到特定对象)变量的代码块:这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变 量).“闭包” 一词 ...