首页 文章

简化PHP代码

提问于
浏览
1

我正在努力改进我的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 回答

  • 2

    这是您可以使用的功能:

    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; ?>
    
  • 1

    通常,您使用两个图层 .

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

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

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

  • 1

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

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

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

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

  • 0

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

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

    工作完全相同,但更容易阅读,imo .

相关问题