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 制作一个模板文件。
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 包含这个模板文件。 显示效果如下
function tpl( $name ) {
include($name . ".php");
}
foreach($GLOBALS 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
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;
在这里,我们把我们准备好的数据。存放到 全局变量 中。 然后,在自定义函数里,通过这个全局变量,还原出变量。
但是,考虑到预定义变量。常常用于其他用途。这里还是放弃了这种做法。
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);
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‘ ); ?> |
<hr />
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‘ ); |
现在,使用模板成了这样子。准备好要赋值的数据。赋值到指定的标记上。 只在最后 方法时,才调用模板并显示。现在看看,如果代码写成这样。给我们来带了多少好处。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。