为什么包括什么时候可以要求在PHP?

如果你经常不得不使用require或者require_once (因为它们通常非常重要),试图在PHP中includeinclude一个库的意义何在?

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

有时候,您将包含来自不受控制的库的文件,或者您的代码正在不同的环境中运行。

有些可能是你的脚本实际上不需要的,但是是帮助文件或者额外的。

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

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

include_once – 与“include”相同,但运行额外的检查以确保文件尚未包含在当前脚本中

要求 – 这将尝试加载文件并在失败时引发致命错误

require_once – 与“require”相同,但运行额外的检查以确保只加载一次

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

编辑:我应该补充说,他们的关键区别是,要求在编译器级失败,而包括在运行时抛出一个错误。

如果不包含文件,则需要停止脚本。
包括只会给出一个错误信息。

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

因为你不希望丢失的文件停止你的表演。 ;)

所有四个可以采取本地文件或URL作为input。 除了处理不可挽回的资源的方式之外, require()include()函数在function上几乎相似。 当require()require_once函数无法find资源时, include()include_once()会提示是否无法检索资源并尝试继续执行程序(如果可能)。

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

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

显然, include只会产生一个警告 。

所以,如果你有可能丢失的文件(比如dynamic地包含可能安全失败的模板) 而且你禁止了警告(或者不介意臃肿的日志),那么file_existsrequire就会变成include

但是,这似乎不是一个非常常见的用例。 包括的原因还是很常见的( 奥卡姆剃刀 ?)更有可能,简单来说就是:

  • 包括更多的语义意义,并​​在其他语言中看到。

http://tr.php.net/manual/en/function.include.php的文档从以下开始:;

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

以下文档也适用于require()。

并在http://tr.php.net/manual/en/function.require.php文件说:;

require()和include()是一样的,除了失败之外,它也会产生一个致命的E_COMPILE_ERROR级错误。 换句话说,它会停止脚本,而include()只发出一个警告(E_WARNING),允许脚本继续。

请参阅include()文档以了解其工作原理。

我认为这就够了:)

差异只是在error handling,当需要的文件不存在:在include情况下,你可以很容易地处理警告,改变执行显示正常的'对不起,错误'页面,发送通知到网站的pipe理员。
如果require你的脚本刚刚停止,致命错误更难以处理,并且不能向用户显示任何消息。