PHP代码分离怎么理解,如何实现的
Admin 2022-08-15 群英技术资讯 251 次浏览
所谓的代码分离 其实只是一种思路,既然是一种思路 那就意味着他是有需求的 没有需求就没有解决方案 没有方案就不存在思路。
在这之前,我们制作 PHP 程序页面的时候。都是 HTML 和 PHP 混合写在一起的。
这产生了什么样的问题,主要有两个:
1、代码太长不便阅读,一个流程往往跨了N行代码,可能之后还需要几个括号结束都不记得了。。 2、不便于编辑网页,我们制作网页的时候。往往是先用 DW 等工具,设计好页面之后,再往里面添加 PHP 代码。但是很多时候,有些 HTML 需要 PHP 输出。这个时候,这些代码就不便于返回 DW 编辑样式。 简单来说就是 修改页面样式困难,所以我们的代码只有php多好 这样代码的行数就明显减少 html代码在另一边, 也能方面的调回dw等工具重新编辑。 比如说:表单页和 PHP 页是分开的。为什么不写在一起呢。 如果写在一起的话。可能会存在一个问题。比如网页一打开。就会马上执行写入操作。而这个时候表单还没有提交。提交以后。也不需要再显示表单页了。于是就有了判断。 if($_POST) {代码如下: <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 包含这个模板文件。 显示效果如下
如果需要显示不同的网页样式。只要加载不同的模板文件就可以了。 代码分离的特点。就是要求:需要知道模板上都有什么样的变量名。它要一个什么样的数据结构。 模板使得我们的 PHP 代码精简了不少。可以集中精力去思考 PHP 应该做的事情。 也让写好的 PHP 程序更易读易改。 但是,这里还存在一些小问题。 我们的 PHP 程序往往代码很长。里面用过的变量有时候有上百个之多。 可能会出现一种情况。就是这个变量。在之后被修改过了。自己却没发现。 这种情况。叫“变量名污染”。有些变量。我们只是希望在 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;
在这里,我们把我们准备好的数据。存放到 全局变量 中。 然后,在自定义函数里,通过这个全局变量,还原出变量。
但是,考虑到预定义变量。常常用于其他用途。这里还是放弃了这种做法。
我们可以使用自定义变量。然后通过自定义函数的参数传进去。 function tpl( $name, $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'); ?>
现在代码如上。 使用 set_var 函数。把要显示的变量,记忆到另一个世界中。然后。在读取模板之前。把变量重新读回来。并恢复成普通的变量。当然。之前用一个变量来记忆也是一个办法。但是始终是占用了程序的变量。 我们可以试试看。多赋值几个。 <h1><?PHP echo $title; ?></h1>
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');
现在,使用模板成了这样子。准备好要赋值的数据。赋值到指定的标记上。 只在最后 方法时,才调用模板并显示。现在看看,如果代码写成这样。给我们来带了多少好处。
代码中不再含有 HTML 码,清晰简单了许多。 我们可以专心写我们的 PHP。只要准备好要输出的变量就可以了。 set_var 会帮我们把这些值。复制到另一个世界中保存的。 这个变量名你之后用来做别的也没关系了。不担心变量名污染。 模板文件,可以轻松的调回可视化编辑器重新回炉加工。 如果你的数据,全部都是从数据库等方面读出来的。 这样会使得我们的 PHP 代码中,不再夹有中文或特殊字符。清一色的 ASCII 码。 这使得 PHP 程序不用再意它本身是什么编码构成,这使得 PHP 程序不用再意它本身是什么编码构成,之前编写代码,之所以在意文件编码。是因为我们的代码中夹着大量的要输出的内容。 这些要输出的内容,是有编码的。 当你的代码中,只有 PHP 的时候,不用再意 PHP 程序本身的编码。使用模板。因为是执行到最后才一次输出。使得我们在编写过程中。不再考虑一些特殊函数。。使用前不能有输出的规则。例如 setcookie header ,使用模板的程序。整页都没有一个输出。。只有最后那里才有。 而且负责输出的代码。只有一行。。目前使用得最多的模板类。要属 smarty 模板类了。免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
php变量的声明:1、变量在PHP中的声明必须用美元符号后跟变量名来表示。2、如果大多数PHP变量不在函数中声明,则只能在声明处草文件结束的单独范围内使用。
在本篇文章里小编给大家整理了一篇关于php去掉一维数组的键值的实例方法,有兴趣的朋友们可以学习下。
如何优化页面响应时间:动态页面静态化优化数据库使用负载均衡使用缓存如果页面中的一些内容不经常改动,可以使用动态页面静态化。好处是:减少服务器脚本的计算时间;降低服务器的响应时间。1、动态URL地址设置静态形式(伪静态)例如:http://xxx.com/index.php?c=play&id=1111 =>http://xxx.com/play/1111.h
今天小编就为大家分享一篇laravel 错误处理,接口错误返回json代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Laravel 路由是开发人员从一开始就学习的特性。但是随着他们项目的增长,管理不断增长的路由文件变得越来越困难,经常需要滚动查找正确的 Route::get() 语句。幸运的是,有一些技术可以使路由文件更短、更易读,让我们来看看以不同的方式对路由及其设置进行分组。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008