为什么包括什么时候可以要求在PHP?
如果你经常不得不使用require
或者require_once
(因为它们通常非常重要),试图在PHP中include
或include
一个库的意义何在?
include
/ include_once
和require
/ 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_exists & require就会变成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
你的脚本刚刚停止,致命错误更难以处理,并且不能向用户显示任何消息。