首先,总体来说,require_once 肯定要比 require 性能好。
因为 require 某个文件等同于 “编译 + 执行” 这个文件;require_once 避免了对相同文件的重复 “编译” 和 “执行”。
即使使用APC大大降低了“编译”阶段的消耗,但是“执行”阶段依然每次都会做重复工作。
其次,鸟哥说的应该是在PHP5.2之前,require_once 的实现机制不健全,只有当参数传的是绝对路径,才会根据路径去确认该文件是否加载过,否则就会 open 这个文件,这显然很不合理。
PHP5.3之后,开始支持相对路径;
但即使是这种场景,也不是 require 绝对比 require_once 性能好,而只是对那些定义比较多的PHP文件是这样;执行代码比较多的场景就一定不是这样了。
综上所述,require_once 从设计思路上来说是要比 require 性能高的;
具体来说
PHP5.2之前:
1、如果使用的是绝对路径,使用 require_once;
2、如果是相对路径的定义文件,使用了APC,选择 require;没有使用 APC,使用 require_once;
3、如果是相对路径的偏执行文件,使用 require_once
PHP5.3之后:
1、对于定义性的文件,如果用了APC,使用 require_once 性能稍高一些;没有APC,当然是 require_once ;
2、对于有执行代码的文件,当然是 require_once;
因为 require 某个文件等同于 “编译 + 执行” 这个文件;require_once 避免了对相同文件的重复 “编译” 和 “执行”。
即使使用APC大大降低了“编译”阶段的消耗,但是“执行”阶段依然每次都会做重复工作。
其次,鸟哥说的应该是在PHP5.2之前,require_once 的实现机制不健全,只有当参数传的是绝对路径,才会根据路径去确认该文件是否加载过,否则就会 open 这个文件,这显然很不合理。
PHP5.3之后,开始支持相对路径;
但即使是这种场景,也不是 require 绝对比 require_once 性能好,而只是对那些定义比较多的PHP文件是这样;执行代码比较多的场景就一定不是这样了。
综上所述,require_once 从设计思路上来说是要比 require 性能高的;
具体来说
PHP5.2之前:
1、如果使用的是绝对路径,使用 require_once;
2、如果是相对路径的定义文件,使用了APC,选择 require;没有使用 APC,使用 require_once;
3、如果是相对路径的偏执行文件,使用 require_once
PHP5.3之后:
1、对于定义性的文件,如果用了APC,使用 require_once 性能稍高一些;没有APC,当然是 require_once ;
2、对于有执行代码的文件,当然是 require_once;