所谓的代码分离 其实只是一种思路,既然是一种思路 那就意味着他是有需求的 没有需求就没有解决方案 没有方案就不存在思路。
在这之前,我们制作 PHP 程序页面的时候。都是 HTML 和 PHP 混合写在一起的。
这产生了什么样的问题,主要有两个:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 |
代码如下:<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 的数组变量就可以了。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 |
<?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 包含这个模板文件。 显示效果如下
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 |
<?PHPfunction
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; |
|
1
2 |
tpl(‘tpl‘);?> |
$GLOBALS[‘list‘] = $list;
在这里,我们把我们准备好的数据。存放到 全局变量 中。 然后,在自定义函数里,通过这个全局变量,还原出变量。
但是,考虑到预定义变量。常常用于其他用途。这里还是放弃了这种做法。
|
1
2
3
4
5 |
function
set_var($name
= NULL, $value
= NULL) { static
$data = array(); if(is_null($name)) return
$data; $data[$name] = $value;} |
我定义一个这样的函数。里面声明 $data 是一个静态变量。 静态变量,使用它的值不会消失。而会被一直保留到 PHP 运行结束。 重复运行这个函数。里面的静态变量值,不会被重新赋值。 如果变量名未指定。则返回数组。。否则 给数组新定义一个索引。并赋值为指定的值。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 |
<?PHPfunction
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‘);?> |
|
1
2
3
4
5
6
7
8
9
10
11
12
13 |
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"); }} |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 |
$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‘); |
现在,使用模板成了这样子。准备好要赋值的数据。赋值到指定的标记上。 只在最后 方法时,才调用模板并显示。现在看看,如果代码写成这样。给我们来带了多少好处。



原文:http://www.cnblogs.com/Stone--world/p/3665121.html