PHP是否需要、需要_一次,或包含在页面加载时自动读取文件?
我有几个页面在PHP中使用include或require语言结构。其中许多都包含在IF、ELSE语句中 我确实意识到,如果缺少所需的文件,则根本不会加载页面,但采用这种方式的主要目的是: 1) 减少页面上的代码混乱 2) 除非满足语句,否则不加载文件 发出include或require语句是否会加载文件(从而消除了我试图通过将其放入if/else语句中实现的好处) 简要示例:PHP是否需要、需要_一次,或包含在页面加载时自动读取文件?,php,include,require,require-once,Php,Include,Require,Require Once,我有几个页面在PHP中使用include或require语言结构。其中许多都包含在IF、ELSE语句中 我确实意识到,如果缺少所需的文件,则根本不会加载页面,但采用这种方式的主要目的是: 1) 减少页面上的代码混乱 2) 除非满足语句,否则不加载文件 发出include或require语句是否会加载文件(从而消除了我试图通过将其放入if/else语句中实现的好处) 简要示例: <?php $i = 1 if($i ==1) { require_once('somefil
<?php
$i = 1
if($i ==1) {
require_once('somefile.php');
} else {
require_once('otherfile.php');
}
?>
在页面加载时,是否检查并加载了两个文件?否,仅加载其中一个文件 页面加载时,是否检查并加载了两个文件 不,至少从(IIRC)PHP4.0.1开始没有
如果您想减少include混乱,并且主要使用面向对象的代码,那么也可以看看PHP。如果您在
If
(或else
)的主体中放置include
/require
语句,那么如果If
的条件为true,就会执行该语句
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';
}
if (false) {
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'
i、 e.require
被执行——并且失败,因为文件不存在
第二个例子是:
if (true) {
require 'file_that_doesnt_exist';
}
if (false) {
require 'file_that_doesnt_exist';
}
不会得到任何错误:未执行
require
。只有在传递时才会计算include
和require
构造。仅当满足表达式时才会读取文件
考虑到结构可能包含变量,解释起来很简单:
require_once("otherfile-{$i}.php");
这是受支持的。但在PHP运行到该特定行之前,它不可能工作,因为它需要知道
$i
的状态才能加载正确的文件。谢谢!我只是不想浪费不必要的资源,我一直在想,为什么会有一些反对自动加载的好理由-大部分与字节码缓存有关。@ThiefMast呃:我不明白你的推理(嗯,没有).我在启用操作码缓存的情况下使用APC,我的应用程序通常会大量使用自动加载,但我从来没有遇到过任何问题。我做错了什么?我应该怎么做才能出现问题?我不记得到底是什么原因造成的。.但我想我在这里读到过,所以搜索可能会有所帮助。自动加载程序和操作码缓存过去不太协调。现代PHP不再是这种情况(自创建realpath缓存以来),尽管设计拙劣的自动加载程序可能会导致比严格必要的更多的文件系统戳和戳。哈哈哈!帕斯卡·马丁(Pascal Martin)再次这样做了——一如既往地提供了出色而详细的输入。:)+1用于演示如何测试它。有人复制了你的脚本,并将{$i}
替换为{$\u GET['i']}
:D(是的,我是邪恶的,呵呵)你的建议会给你带来不愉快的来世。哦,谁知道呢。也许你只需要在他们把你送进地狱之前说一声,或者说一声--
,你就会神奇地进入天堂;)+1.