这个问题具体是关于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;
在这种情况下,我不确定幕后会发生什么。它是否将所有类加载到工作内存中,还是只加载实际使用的函数?如果你导入它但不使用任何一个,它是否仍然浪费资源?
答案 0 :(得分:1)
这个问题特定于PHP,因为其他语言在解析器中的工作方式完全不同。
第二条评论:use
不包含任何内容,因此不能替代include/require
。
第三条评论:因为将PHP源代码包含在脚本中需要将代码解析为然后解释的操作码,所以有操作码缓存在第一次之后消除此步骤。这些都大大提高了性能。
会发生什么?包含文件执行该文件。这意味着从缓存中解析或获取源,然后执行。定义某些内容的每一行代码(如class
或function
)都将为后面的代码行定义其部分。执行某些操作的每一行(如定义变量或echo
)也会执行,并按预期执行。
Include
不是源代码包含,然后进行解析。由于代码已执行,未作为源粘贴,因此无法在任何地方使用include
。实际上,如果包含的代码返回一个值,include
本身就可以充当函数。这通常用于包含配置值,以便从操作码缓存中受益,而不是一直解析INI文件:
config.php
return array('db' => 'example.com', 'user' => 'foo',);
other file:
$config = include('config.php);