include / import指令有多贵?

时间:2012-12-10 08:38:18

标签: php include

  

可能重复:
  cost of “include” in PHP?

这个问题具体是关于PHP,但我很确定他回答,在本质上,对于支持类(至少是解释的)的大多数现代编程语言来说都是类似的。

当你include或使用一个类(使用namespaces for PHP> = 5.3.0)时,会花多少处理资源?

例如,假设有一个很大的PHP脚本文件Database.php,它有超过几千行代码,你可以在另一个脚本中导入它:

# PHP >= 5.3.0
use Service\Database;

# in previous versions
include Service/Database.php;

在这种情况下,我不确定幕后会发生什么。它是否将所有类加载到工作内存中,还是只加载实际使用的函数?如果你导入它但不使用任何一个,它是否仍然浪费资源?

1 个答案:

答案 0 :(得分:1)

这个问题特定于PHP,因为其他语言在解析器中的工作方式完全不同。

第二条评论:use不包含任何内容,因此不能替代include/require

第三条评论:因为将PHP源代码包含在脚本中需要将代码解析为然后解释的操作码,所以有操作码缓存在第一次之后消除此步骤。这些都大大提高了性能。

会发生什么?包含文件执行该文件。这意味着从缓存中解析或获取源,然后执行。定义某些内容的每一行代码(如classfunction)都将为后面的代码行定义其部分。执行某些操作的每一行(如定义变量或echo)也会执行,并按预期执行。

Include不是源代码包含,然后进行解析。由于代码已执行,未作为源粘贴,因此无法在任何地方使用include。实际上,如果包含的代码返回一个值,include本身就可以充当函数。这通常用于包含配置值,以便从操作码缓存中受益,而不是一直解析INI文件:

config.php
return array('db' => 'example.com', 'user' => 'foo',);

other file:
$config = include('config.php);