我应该更喜欢在 spl_autoload_register() 回调中使用 require 而不是 require_once
Should I prefer require instead of require_once inside spl_autoload_register() callback
在 PHP docs 的示例中,加载程序在其中使用 include
:
function my_autoloader($class) {
include 'classes/' . $class . '.class.php';
}
spl_autoload_register('my_autoloader');
但至少有几个 (, two) 自动加载相关的 SO 问题出现 require_once()
。
事实上,我自己的代码也已经使用了require_once()
。
所以,我的问题是:如何 include
/require
自动加载器回调中的源文件真的重要吗?
我想我理解 include
和 require
之间的区别,关于 …_once
部分的问题 :)
当在该回调中使用 require_once()
时,PHP 是否会针对已经需要的文件列表进行额外检查?
如果我们将使用require()
,是否存在双重要求某些文件的风险? require()
会比 require_once()
快吗?
function my_autoloader($class) {
require_once('classes/' . $class . '.class.php');
}
spl_autoload_register('my_autoloader');
VS
function my_autoloader($class) {
require('classes/' . $class . '.class.php');
}
spl_autoload_register('my_autoloader');
我创建了一个 primitive benchmark。
我无法看出这两种方法之间的显着差异(require
与 require_once
)。也许 "benchmark" 本身有问题,请随时发送 PR 来修复它:)
当其他进程在测试时使用磁盘时,执行时间发生了最明显的变化 运行。
两种方法在 7200rpm HDD 上显示 300 类 ~0.062。
> php -v
PHP 7.2.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies
在 PHP docs 的示例中,加载程序在其中使用 include
:
function my_autoloader($class) {
include 'classes/' . $class . '.class.php';
}
spl_autoload_register('my_autoloader');
但至少有几个 (require_once()
。
事实上,我自己的代码也已经使用了require_once()
。
所以,我的问题是:如何 include
/require
自动加载器回调中的源文件真的重要吗?
我想我理解 include
和 require
之间的区别,关于 …_once
部分的问题 :)
当在该回调中使用 require_once()
时,PHP 是否会针对已经需要的文件列表进行额外检查?
如果我们将使用require()
,是否存在双重要求某些文件的风险? require()
会比 require_once()
快吗?
function my_autoloader($class) {
require_once('classes/' . $class . '.class.php');
}
spl_autoload_register('my_autoloader');
VS
function my_autoloader($class) {
require('classes/' . $class . '.class.php');
}
spl_autoload_register('my_autoloader');
我创建了一个 primitive benchmark。
我无法看出这两种方法之间的显着差异(require
与 require_once
)。也许 "benchmark" 本身有问题,请随时发送 PR 来修复它:)
当其他进程在测试时使用磁盘时,执行时间发生了最明显的变化 运行。
两种方法在 7200rpm HDD 上显示 300 类 ~0.062。
> php -v
PHP 7.2.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies