PHP是否需要,require_once或包含在页面加载时自动读取文件?

时间:2011-03-12 22:34:05

标签: php include require require-once

我有几个页面在PHP中使用include或require语言结构。其中许多都属于IF,ELSE语句。

我确实意识到如果缺少require'd文件,页面根本不会加载,但包含这种方式的主要目的是:

1)减少页面上的代码混乱

2)除非满足声明,否则不加载文件。

发布include或require语句是否会加载文件(从而消除了我试图通过置于if / else语句中获得的好处?

简要示例:

<?php


$i = 1

if($i ==1) {

      require_once('somefile.php');

} else {

     require_once('otherfile.php');
}

?>

在页面加载时,是否检查并加载了两个文件?

4 个答案:

答案 0 :(得分:8)

如果您在include (或require的正文中放置if / else声明,则会执行该声明如果if的条件为真。

if ($a == 10) {
    // your_first_file.php will only be loaded if $a == 10
    require 'your_first_file.php';
} else {
    // your_second_file.php will only be loaded if $a != 10
    require 'your_second_file.php';
}


而且,如果你愿意,你可以很容易地测试它。
第一个例子:

if (true) {
    require 'file_that_doesnt_exist';
}

会得到你:

Warning: require(file_that_doesnt_exist) [function.require]: failed to open stream: No such file or directory
Fatal error: require() [function.require]: Failed opening required 'file_that_doesnt_exist'

即。 require已执行 - 并且因文件不存在而失败。


虽然这是第二个例子:

if (false) {
    require 'file_that_doesnt_exist';
}

不会给您带来任何错误:require未执行。

答案 1 :(得分:4)

  

在页面加载时,是否检查并加载了两个文件?

不,至少不是(IIRC)PHP 4.0.1。

如果你想减少包含杂乱,并且你正在使用主要面向对象的代码,还要看看PHP的autoloading

答案 2 :(得分:2)

不,只会加载其中一个文件。

答案 3 :(得分:2)

includerequire构造仅在传递时进行评估。只有在满足表达式时才会读取文件。

通过考虑构造可能包含变量来解释很简单:

require_once("otherfile-{$i}.php");

这是支持的。但是在PHP运行该特定行之前它可能无法工作,因为它需要知道加载正确文件的$i状态。