【问题标题】:PHP parsing on includesPHP 解析包含
【发布时间】:2010-11-25 11:27:41
【问题描述】:

我包含一个定义路径常量的文件 init.php。因此,如果我在一个文件 (index.php) 中包含 init.php,然后在另一个文件 (layout/header.php) 中包含... . 是init.php在添加到这些文件之前解析,还是添加到父文件,然后将父文件作为一个整体解析?

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

【问题讨论】:

    标签: php parsing include


    【解决方案1】:

    将其视为被复制粘贴到文件中包含它的位置。如果您不想重新定义您的内容,请使用 require_onceinclude_once


    包含.php.txt 没有区别。您可以在.txt 文件中包含php,只要您有<?php 打开标签,它就会被解析。

    【讨论】:

      【解决方案2】:

      实际上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】:

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

        如果你想确保初始化文件在请求的运行时只加载一次,那么使用require_once 确保它只被解析一次,无论你调用它多少次。尝试在需要其常量的任何地方加载初始化文件是个好主意,但使用require_once 以确保您不会在需要时解析它。

        【讨论】:

        • pingw33 是正确的 - requireinclude 仅在失败的严重性中延迟。
        • 同样不执行文本包含,每个 php 文件都按原样解析。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-07
        • 2014-02-21
        • 2021-07-05
        • 2018-10-16
        相关资源
        最近更新 更多