2

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

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

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

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

发出 include 或 require 语句是否会加载文件(从而消除我试图通过放置在 if/else 语句中来实现的好处?

简要示例:

<?php


$i = 1

if($i ==1) {

      require_once('somefile.php');

} else {

     require_once('otherfile.php');
}

?>

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

4

4 回答 4

8

如果将include/require语句放在if (or 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未执行。

于 2011-03-12T22:35:32.843 回答
4

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

不,至少从 (IIRC) PHP 4.0.1 开始没有。

如果您想减少包含混乱,并且主要使用面向对象的代码,还可以查看 PHP 的autoloading

于 2011-03-12T22:35:31.247 回答
2

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

于 2011-03-12T22:35:21.940 回答
2

includeandrequire结构仅在通过时进行评估。仅当满足您的表达式时才会读取文件。

考虑到构造可能包含变量,这很容易解释:

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

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

于 2011-03-12T22:38:40.253 回答