如果我在评估为include
的条件中放置require
或false
语句,那么PHP解释器是否会完全跳过包含文件,还是会加载它以防万一?
一个例子是:
if ($some_user_var) {
require 'this.php';
} else {
//do stuff
}
我在某处读到,require
将始终包含在解释器中,无论条件如何,但include
不会。如果是这种情况,只需从require
切换到include
就意味着由于I / O减少和解析开销而导致免费加速。
如果我正在运行像eAccelerator这样的预处理器,它可能会有所不同,但我们假设我不这样做。
答案 0 :(得分:24)
只有在条件为真时才会包含它。我不知道你在哪里读,但他们错了。
include
和require
之间的唯一区别是include
如果失败则会发出警告,而require
会抛出致命错误。
要确认这一点,请参阅the PHP manual page for require
。
(ps - 如果您正在进行条件包含,取决于实际情况,您可以考虑使用include_once()
或require_once()
代替
答案 1 :(得分:1)
这不正确。 require
将不包含被包装在永远不会被调用的块中的文件,php解释器不会忽略它们。 include
和require
在性能方面几乎没有差异(就此而言,它们与_once没有太大区别,尽管它更重要)。
答案 2 :(得分:1)
我也在某处读过。这个论点是这样的:
如果你把一个条件放在include周围,那么在它开始解释代码之前,PHP无法知道它是否是必需的,并且在它获取所有变量和函数之前它无法解释代码。因此 - 文件。因此,无论条件如何,它都会加载所有文件,然后将它们从最终的“编译”中删除。
尽管如此,如果你在一个包含错误的PHP文件中包装一个条件,它就不会破坏它。如果你在一个包含的文件中声明一个变量,然后使用变量的值来确定是否包含它,它就不会获取它的值:)
在旧版本的PHP中,这可能是一个问题吗?
我没有对加载速度和RAM使用情况进行过测试 - 但我很想得到一个明确的答案。条件包含是否涉及任何开销?