【发布时间】:2010-11-25 11:27:41
【问题描述】:
我包含一个定义路径常量的文件 init.php。因此,如果我在一个文件 (index.php) 中包含 init.php,然后在另一个文件 (layout/header.php) 中包含... . 是init.php在添加到这些文件之前解析,还是添加到父文件,然后将父文件作为一个整体解析?
编辑:为什么这很重要,因为 init.php 定义了相对于解析位置的路径变量。
【问题讨论】:
我包含一个定义路径常量的文件 init.php。因此,如果我在一个文件 (index.php) 中包含 init.php,然后在另一个文件 (layout/header.php) 中包含... . 是init.php在添加到这些文件之前解析,还是添加到父文件,然后将父文件作为一个整体解析?
编辑:为什么这很重要,因为 init.php 定义了相对于解析位置的路径变量。
【问题讨论】:
将其视为被复制粘贴到文件中包含它的位置。如果您不想重新定义您的内容,请使用 require_once 或 include_once。
包含.php 或.txt 没有区别。您可以在.txt 文件中包含php,只要您有<?php 打开标签,它就会被解析。
【讨论】:
实际上include 和require 完全一样,除了require 将失败并显示E_ERROR 而include 将发出警告。此外,这两个语句仅在它们在脚本中实际执行时才被激活。所以下面的代码将永远有效:
<?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_once 或 require_once。
【讨论】:
这取决于您使用的是include 还是require。使用include 将包含文件的文本内容添加到父级,然后解析整个内容。对于require,首先解析包含的文件并将其内容提供给运行时,然后处理继续解析包含文件的其余部分。
如果你想确保初始化文件在请求的运行时只加载一次,那么使用require_once 确保它只被解析一次,无论你调用它多少次。尝试在需要其常量的任何地方加载初始化文件是个好主意,但使用require_once 以确保您不会在需要时解析它。
【讨论】:
require 和 include 仅在失败的严重性中延迟。