为什么包括什么时候你需要PHP?

时间:2011-05-17 05:35:44

标签: php

如果您经常不得不使用includeinclude_once(因为它们通常是批判性的),尝试使用PHP中的requirerequire_once库有什么意义?重要)?

9 个答案:

答案 0 :(得分:46)

有时,您要包含您无法控制的库中的文件,或者您的代码在不同的环境中运行。

有可能其中一些实际上并不是您的脚本所必需的,而是辅助文件或其他内容。

例如,如果您的PHP生成HTML,您可以使用include来添加横幅。但是如果由于某种原因缺少横幅文件,您不希望文件停止。你想要优雅地失败。

答案 1 :(得分:31)

include / include_oncerequire / require_once之间的区别在于,当找不到文件时,前者触发警告而后者触发错误。意见可能会有所不同,但IMO,如果由于某种原因不存在或可读所需的文件,这代表一个非常破碎的情况,我宁愿看到错误并停止执行,而不是在明确破坏的上下文中发出警告并继续执行。因此,我认为最好只使用require / require_once并完全避免使用include / include_once

答案 2 :(得分:7)

include - 这会尝试加载文件,但如果失败则不会暂停执行

include_once - 与'include'相同但运行额外检查以确保该文件尚未包含在当前脚本中

require - 这会尝试加载文件并在失败时抛出致命错误

require_once - 与'require'相同,但会另行检查以确保只加载一次

如果您不需要使用include_once或require_once,请尝试避免使用它们,因为额外检查会增加一些开销。

编辑:我应该补充说,它们的关键区别在于编译器级别需要失败,而include会在运行时抛出错误。

答案 3 :(得分:3)

如果脚本不包含该文件,则需要停止脚本 包含只会提供错误消息。

顺便说一句: * _一旦很慢。除非你真的需要,否则不应该使用它。

答案 4 :(得分:2)

因为您不希望丢失的文件停止播放。 ;)

答案 5 :(得分:2)

显然,包含只会generate a warning ...

因此,如果您有可能丢失的文件(例如动态包含可能安全失败的模板)您正在禁止警告(或者不介意膨胀日志),那么 file_exists & 要求只需包含

然而,这似乎不是一个非常常见的用例。 包含的原因仍然很常见(Occam's Razor?)更有可能,简单地说就是这样:

  • 包含更具语义感,并且可以在其他语言中看到。

答案 6 :(得分:2)

所有四个都可以将本地文件或URL作为输入。 require()include()函数的功能几乎相似,除了它们处理无法挽回的资源的方式。如果无法检索资源,include()include_once()会发出警告并尝试继续执行程序(如果可能),而require()require_once函数会停止处理页面找不到资源。

最好使用require_once()来包含包含代码和include_once()的文件,以包含不包含代码的文件,例如HTML,CSS等(这是我的方法,其他的可能会有所不同。)

另请阅读:http://arin.me/blog/php-require-vs-include-vs-require_once-vs-include_once-performance-test

答案 7 :(得分:0)

http://tr.php.net/manual/en/function.include.php处的文档以:

开头
  

include()语句包含和   评估指定的文件。

     

以下文档也适用   要求()。

http://tr.php.net/manual/en/function.require.php上的文档说:

  

require()与include()相同   除非失败,它也会   产生致命的E_COMPILE_ERROR级别   错误。换句话说,它会停止   脚本而仅包含()   发出警告(E_WARNING)   允许脚本继续。

     

请参阅include()文档   这是如何运作的。

我认为这就够了:)

答案 8 :(得分:0)

只是在错误处理方面存在差异,当所需文件不存在时:如果是include,您可以轻松处理警告,更改执行以显示正常的“抱歉,错误”页面,向网站管理员发送通知。<登记/> 如果require您的脚本将停止,致命错误将更难处理,并且您无法向用户显示任何消息。