简化PHP代码

时间:2011-07-21 16:06:06

标签: php function

我正在努力改进我的CMS。目前,我正在尝试最小化前端代码,以使主题更容易。要显示最新的帖子,这是我正在使用的代码:

<?php 
   $query = mysql_query("SELECT * FROM posts order by id desc") or die(mysql_error());
   while($row = mysql_fetch_array($query)) :
?>
   <h3><a href="?id=<?php echo $row['id'] ?>"><?php echo $row['title'] ?></a></h3>
<?php endwhile; ?>

为前端用户简化此操作的最佳方法是什么?我正在考虑使用functions.php文件,但我不确定如何做到这一点。有没有办法让PHP的前两行成为一个函数然后用户只需要调用该函数?

4 个答案:

答案 0 :(得分:2)

通常你使用两层。

  • 数据库访问层:查询函数接受任意查询,验证返回值,在出错时记录到文件,如果需要则死亡。您可以创建单独的函数来一步查询和检索数据(query_one_row(),query_dataset_as_array(),...)。

  • 数据模型层:每个主要查询的单独函数,每个函数调用较低层。例如:get_recent_posts(),

尝试重写@ Sascha使用这两层的答案。

答案 1 :(得分:1)

以下是您可以使用的功能:

function getPosts() {
    $query = mysql_query("SELECT * FROM posts order by id desc") or die(mysql_error());
    $result = array();
    while($row = mysql_fetch_object($query)) {
        $result[] = $row;
    }
    return $result;
}

并在模板中:

<?php foreach(getPosts() as $post) : ?>
<h3><a href="?id=<?php echo $post->id ?>"><?php echo $row->title ?></a></h3>
<?php endforeach; ?>

答案 2 :(得分:1)

注意:我知道我没有回答你的问题,但只想给你一个抬头。

您可能希望拆分代码的不同问题。一方面,存在数据的渲染,另一方面,业务逻辑和持久层。看起来你在一个文件中编写所有内容,这可能会使事情变得复杂。尝试使用像yii,zend框架或symfony2这样的mvc。

另外,“或死”实际上是一种不好的做法。注意你是如何失去正确记录错误并直接将错误输出给用户而不是给他们一个很好的错误页面来查看的机会,并且可能会给你一些关于错误的反馈。

编辑:对于持久层,您可以尝试doctrine2

答案 3 :(得分:0)

为了改善Sascha上面的答案,你可以做到这一点......

<?php

foreach(getPosts() as $post)
{
    printf( '<h3><a href="?id=%d">%s</a></h3>', $post->id, $row->title );
}

?>

完全相同,但更容易阅读,imo。