需要()不好的做法?如何不重用代码

时间:2012-02-18 11:43:42

标签: php dry

使用require()是不是很糟糕?大多数网站都有一个页眉和页脚,无论您在页面上导航,它们看起来都是一样的。但主要内容因页面而异。既然我不想重用代码,在两个地方使用相同的代码,我认为require()非常好。但是可以像我一样使用它吗?

这是我的例子:

<div class="content">
    <section>
        <?php require('mainpage.php'); ?>
    </section>
    <aside class="sidebar">
        <div class="sidebar-box">
            <?php require('sidebar/box1.php'); ?>
        </div>
        <div class="sidebar-box">
            <?php require('sidebar/box2.php'); ?>
        </div>
    </aside>
</div>

侧边栏框是一个包含“最新新闻”等内容的框。由于我可能希望在许多页面上有“最新新闻”框,我需要()它以便不具有相同的代码在两个地方。

我应该在其他地方解决吗?

感谢您的帮助!

4 个答案:

答案 0 :(得分:4)

这看起来完全没问题,而且正是为require()构建的。

使用require()不是很好的做法的情况通常在PHP端 - 例如获取直接执行的大块PHP代码。在这些情况下,拥有一个包含函数或类的适当库是更好的主意。但是使用require()获取重复的页面部分很好。

答案 1 :(得分:3)

不,当然不是。 require()是一种很好的做法,尤其是当您想让用户与您的网页进行互动之前进行一些控制时。例如,在将特定页面提供给用户之前,您可以将数据库连接数据或用户会话控制数据保存在单独的 PHP 文件中,并 require 。通过这种方式,您可以重用代码并方便您的工作。

答案 2 :(得分:0)

是的,你概述的原则是好的。避免代码重复并重复使用这样的“块”总是好的。我会说你应该避免重新发明轮子。您可能需要调查模板系统,以帮助您管理您为构建网站而创建的“块”。我不会尝试自己构建一个,而是已经在那里调查那些(Twig和Smarty是两个想到的,还有其他的)。即使你决定不使用它,看着它并看看它是如何放在一起的,将有助于你建立自己的。

答案 3 :(得分:0)

根本没有错,重用代码块是非常好的做法。它还使HTML结构更具可读性,并为您提供HTML表示和PHP业务逻辑之间的基本分离。查看MVC pattern了解为什么这是一件好事。

要记住一些要点:

  • 您可能需要考虑使用具有完整服务器文件路径的$ docroot变量,因为相对文件路径在某些PHP安装上偶尔会出现问题,并且如果您从其他文件中包含上述代码本身也是如此。相对文件路径看起来更容易移动整个代码库,但是如果你这样做就可以改变$ docroot并且没关系。您还可以使用$ librarydir变量,以便可以在不移动PHP文件位置的情况下移动HTML模板。
  • 有些文件应该带有require_once(),这样你就不会弄得一团糟HTML标题,页脚等可能听起来很明显,但是很容易将页脚放入两个文件中,然后从其他地方包含这些文件,这样可以通过提供更详细的错误消息来简化调试。
  • 您可能会发现,以更加正式的灵活方式执行MVC方法的模板引擎可以帮助您。查看其他人提到的SmartyDwoo,这是PHP5的重写。
  • 如果包含的文件中的代码使用全局范围内的变量,并且随着程序变得更加复杂,可能会发生奇怪的事情,这可能导致难以确定的错误,其中一个包含通过更改巧妙地破坏另一个具有相同名称的变量。考虑将sideblock的代码放入函数或类中,以便变量在它们自己的范围内,并且可以将它们分开。