将代码保存在单独的文件中
Posted
技术标签:
【中文标题】将代码保存在单独的文件中【英文标题】:Keep code in separate file 【发布时间】:2009-07-01 12:29:25 【问题描述】:topic.php
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
$query = mysql_query("SELECT * FROM topics WHERE id = $id");
$row = mysql_fetch_assoc($query);
$title = htmlspecialchars($row['title']);
$text = bbcode($row['text']);
查看/topic.php
<h1><?=$title?></h1>
<p><?=$text?></p>
<h1>Replies</h1>
$q = mysql_query("SELECT * FROM replies WHERE topic_id = $id");
while ($r = mysql_fetch_array($q))
$text = bbcode($r['text']);
$date = $r['date'];
$poster = $r['poster'];
$edited = $r['edited'];
echo "<p>$text</p>";.......
如您所见,我在 view/topic.php 中有一些丑陋的代码。我可以以某种方式将它保存在 topic.php 中吗?网页设计师不得不处理这一切并不好玩。
谢谢!
【问题讨论】:
你能澄清你想要什么吗?您是否希望代码仅存在于一个地方? 是的,没错,我想将代码保存在 1 个文件中 我没有打开 register_globals,刚刚检查过 【参考方案1】:您可以尝试将viewtopic.php中的代码放入一个函数中,放入topic.php中的一个函数中。
看起来您已经在 viewtopic.php 中包含了 topic.php,但如果您没有,您也应该这样做。
例如,您可以将其添加到 topic.php:
function ViewTopic($id)
$q = mysql_query("SELECT * FROM replies WHERE topic_id = $id");
while ($r = mysql_fetch_array($q))
$text = bbcode($r['text']);
$date = $r['date'];
$poster = $r['poster'];
$edited = $r['edited'];
echo "<p>$text</p>";.......
这就是 viewtopic.php 的样子:
<h1><?=$title?></h1>
<p><?=$text?></p>
<h1>Replies</h1>
ViewTopic($id);
【讨论】:
请注意,原始代码和此答案都包含 SQL 注入漏洞。任何人都可以传递任何他们想要的 ID(包括恶意 SQL),您的代码将执行它。见***.com/questions/1973/… 好收获。在 SQL 查询中使用 $_GET 时应该小心。【参考方案2】:您可以将所有这些代码放入一个返回所需内容的函数中。然后调用函数echo func()
【讨论】:
【参考方案3】:使用输出缓冲,您可以真正轻松地创建自己的小模板引擎,实现更好的逻辑/布局分离。
function renderView($viewFile, $data)
ob_start();
extract($data);
require($viewFile);
return ob_get_clean();
上面的代码来自一个小爱好项目,并不完整,但它是一个很好的概念证明。它的作用是从 $data 哈希图中提取键/值对,使它们在当前范围内可用。 $data = array("name" => "Kim");将使 $name 在视图中可访问。
所有这些都是在输出缓冲中完成的,所以你可以对输出做任何你想做的事情。您可能想要实现缓存,使用它来呈现电子邮件(不再需要过多的字符串连接)和类似的东西。
【讨论】:
以上是关于将代码保存在单独的文件中的主要内容,如果未能解决你的问题,请参考以下文章