2009-09-03 94 views
2

我包括一个文件init.php定义路径常量。所以,如果我有的init.php在一个文件中(的index.php),然后在另一个文件(布局/ header.php文件)......是的init.php被添加到这些文件或之前解析它被添加到父文件,然后父文件被作为一个整体进行分析?PHP解析包括

编辑:为什么这很重要是因为init.php定义路径变量相对于它被解析的位置。

回答

3

实际上includerequire是相同的除了require将失败与E_ERRORinclude将发出警告。而且这两个语句只有在脚本内部实际执行时才会被激活。所以,下面的代码将始终工作:

<?php 
echo "Hello world"; 
if (0) require "non_existing.php"; 

回答你的问题是,index.php将首先被解析和执行。然后当include "init.php"遇到文件init.php被解析并在当前范围内执行。对于layout/header.php也是如此 - 它将首先被解析。

如前所述init.php将被解析,每次include/require被称为执行,所以你可能会想使用include_oncerequire_once

3

认为它被复制粘贴到文件所在的位置。如果你不想让你的东西重新定义,请使用require_onceinclude_once


有包括.php.txt之间没有差别。你可以在一个.txt文件中包含php,只要你有<?php打开标签,它就会被解析。

0

这取决于您是否使用includerequire。随着include被包含的文件的文本内容被添加到父项,然后整个事情被解析。使用require首先解析包含的文件,并将其内容提供给运行时,然后处理继续解析包含文件的其余部分。

如果您想确保init文件仅在请求的运行时中加载一次,那么请使用require_once来确保仅在一次调用它时才会对其进行解析。在任何需要它的常量的地方尝试加载init文件是一个好主意,但使用require_once可以确保在需要时不会再解析它。

+1

pingw33是正确的 - 'require'和'include'只在失败的严重程度上延迟。 – Guss 2009-09-04 00:24:53

+0

也没有执行文本包含,每个php文件都按原样解析。 – pingw33n 2009-09-04 01:19:21