require()是一种糟糕的做法吗?如何不重用代码



大量使用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>

侧边栏框是一个包含"最新消息"等内容的框。由于我可能想在许多页面上都有"最新新闻"框,我需要它(),这样就不会在两个地方有相同的代码。

我应该用别的方法解决吗?

谢谢你的帮助!

这看起来完全没问题,正是require()的初衷。

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

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

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

需要记住的几点:

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

是的,您所概述的原则是好的。避免代码重复和重复使用这样的"块"总是很好的。我想说你应该避免重新发明轮子。你可能想研究一个模板系统来帮助你管理你为构建网站而创建的"区块"。与其试着自己建造一个,我宁愿调查已经存在的两个(Twig和Smarty是脑海中浮现的两个,还有其他)。即使你决定不使用它,当你构建自己的产品时,看看它并看看它是如何组合在一起的也会对你有所帮助。

最新更新