所谓的代码分离 其实只是一种思路,既然是一种思路 那就意味着他是有需求的 没有需求就没有解决方案 没有方案就不存在思路。
在这之前,我们制作 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 |
<?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 ; |
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 |
<?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‘ ); ?> |
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