php 包含文件何时被解析?

When is a php include file parsed?

什么时候解析 PHP 包含文件?在启动时,还是在执行期间?

我的网络表单调用单个 php 脚本。根据 URL 中传递的参数,switch/case 条件决定脚本将执行的操作。交换机中的每个 "case" 都有自己的包含文件。

如果包含文件在初始加载期间被解析,那么我的 php 脚本将占用更多 memory/time 来处理,这让我相信从我的网站调用了单独的 php 文件形式比拥有包含所需内容的形式更好。

如果包含文件在需要时被解析(因此,当代码的一个分支到达特定的 case 语句时,它然后执行包含)它告诉我我的代码在内存上会相当保守。

所以....我的问题...什么时候解析PHP 包含文件?在初始加载时,还是在执行期间?

(注意...我这里没找到答案,我看了http://php.net/manual/en/function.include.php)

包含文件 include 语句在运行时达到。为了非常简洁地总结这意味着什么,永远不会包含以下文件:

if (false) {
    include 'foo.php';
}

包含在 include 语句中的文件在执行期间被解析。当您的 php 代码遇到 include 语句时,它将开始解析文件以查看其中的内容。 来自 w3schools

The include (or require) statement takes all the text/code/markup that exists in the specified file and copies it into the file that uses the include statement.

还有其他类似主题的问题:

In PHP, how does include() exactly work?

由于您担心太多包含的内存使用,我认为除了直接回答您的问题之外,提供更多详细信息会很有用。

首先,直接回答你,PHP 文件在加载后立即被解析——如果文件包含语法错误,你会立即被告知;它不会等到它到达那行代码。但是,仅当执行包含 include 语句的特定代码行时,才会包含后续文件。

您担心内存使用问题,但包含大量文件通常不是主要的内存问题,也不是主要的性能问题。事实上,任何规模的大多数现代 PHP 应用程序都会使用一个框架库,该库会为每个页面加载加载数百个 PHP 文件。内存和性能问题更有可能是由代码中的错误引起的,而不是简单地加载过多代码。

如果您担心内存和性能问题,您应该考虑使用 PHP 的 OpCache 功能。启用此功能后,PHP 将其包含在系统中的所有文件的编译状态存储在内存中。因此,当它再次运行该页面时,遇到 include 语句时不需要实际加载或解析任何内容;它只是从缓存中获取它。

使用 OpCache,您可以编写包含大量文件的代码,并且完全没有任何性能损失。

好消息是 OpCache 在最近的 PHP 版本中默认启用,并且对开发人员完全透明——您甚至不需要知道它的存在;打开和关闭它的唯一区别是您的网站 运行 更快。

因此,首先,请确保您的 PHP 版本是最新的(v5.5 或更高版本)。然后确保在 PHP.ini 文件中启用了 OpCache。那就坐下来,别再担心这些事情了。