如果您经常不得不使用include
或include_once
(因为它们通常是批判性的),尝试使用PHP中的require
或require_once
库有什么意义?重要)?
答案 0 :(得分:46)
有时,您要包含您无法控制的库中的文件,或者您的代码在不同的环境中运行。
有可能其中一些实际上并不是您的脚本所必需的,而是辅助文件或其他内容。
例如,如果您的PHP生成HTML,您可以使用include来添加横幅。但是如果由于某种原因缺少横幅文件,您不希望文件停止。你想要优雅地失败。
答案 1 :(得分:31)
include
/ include_once
和require
/ 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
您的脚本将停止,致命错误将更难处理,并且您无法向用户显示任何消息。