适当包括PHP中的设计实践

时间:2014-10-06 14:05:24

标签: php include conventions

我刚刚开始研究更大的预先存在的代码库(PHP),我注意到很多这些文件以不可读的方式使用包含/需求。包含/需要通过文件系统进行级联,因为系统中的几乎每个文件都包含/需要一个名为common.php的文件。这个公共文件包含/几乎要求所有其他文件,所以当开发人员有疑问时,他们只是包含/需要普通文件并称之为好。

这是由专业网站开发人员编写的,我还是学生,所以我很好奇这是否是PHP的常见做法。在PHP中应该有一个包含/需要所有内容的公共文件,是否应该逐个包含/需要每个文件,或者是否有不同的常规做法?

旁注:我试图为新的api文件切换(同时保留旧的兼容性测试),而且我很难分辨哪些文件使用我的新api或者旧的。

2 个答案:

答案 0 :(得分:3)

通常,includes应该用于基于视图的素材(HTML,Smarty,可能是XML或XSLT),就像用于在{{3}中构建视图的标记一样}。但是,require();require_once();用于控制服务器端核心功能在功能或面向对象设置(MVC中的控制器和模型)中的结合。

require();require_once();都提供了编程安全机制,如果代码失败,代码将停止运行并将错误发送到日志 - 请参阅MVC approach和{{3的文档}}。 include();尽管有错误仍会继续运行错误的代码 - 你不希望这样。

关于一个文件"包括所有内容"的另一个问题,一些PHP框架如Zend和require允许称为自动加载器的东西 - 这会加载所有可用的类并实例化主程序员随意使用对象的核心类。

如果您没有使用框架,可以通过创建配置或在您的情况下使用公共文件来进行模拟。但是,您可能不想随意加载所有内容,因为当其他开发人员稍后尝试进行故障排除时可能会造成混淆 - 正如您现在可能会发现的那样。您将不得不评估,测试和重新设计代码,以找出真正常见的内容以及代码中稀疏使用的内容。我之前通过跟踪来完成此操作 - 添加error_log()var_dump()以便在数据移动代码时跟踪数据。

答案 1 :(得分:0)

当你掌握PHP时,可能是熟悉PSR的好时机。您可以在PHP-FIG网站上找到各种PSR标准的定义。你还会找到关于这个主题的几十个很棒的教程(我会让谷歌处理这个链接)。

特定于您的问题的是PSR-0和PSR-4,每个都处理自动加载。关于自动加载和PSR的争论仍在继续,并不是每个人都有好感。无论喜欢与否,这都是一个更频繁遇到的现实,能够理解并利用它将极大地帮助您提升自己的舒适度。

以下PSR确实可以让您的代码更容易为组织外部人员阅读,并且可以通过composer / packagist更轻松地公开分享您的项目。