在netbeanstodo示例php应用程序中,spl_autoload_register是如何工作的?
我正在看Netbeans中Todo应用程序的示例代码。有人能在这里向我解释一下spl_自动加载_寄存器功能的用法吗: 这是自动加载功能在netbeanstodo示例php应用程序中,spl_autoload_register是如何工作的?,php,class,netbeans,spl-autoload-register,Php,Class,Netbeans,Spl Autoload Register,我正在看Netbeans中Todo应用程序的示例代码。有人能在这里向我解释一下spl_自动加载_寄存器功能的用法吗: 这是自动加载功能 public function loadClass($name) { $classes = array( 'Config' => '../config/Config.php', 'Error' => '../validation/Error.php', 'Flas
public function loadClass($name) {
$classes = array(
'Config' => '../config/Config.php',
'Error' => '../validation/Error.php',
'Flash' => '../flash/Flash.php',
'NotFoundException' => '../exception/NotFoundException.php',
'TodoDao' => '../dao/TodoDao.php',
'TodoMapper' => '../mapping/TodoMapper.php',
'Todo' => '../model/Todo.php',
'TodoSearchCriteria' => '../dao/TodoSearchCriteria.php',
'TodoValidator' => '../validation/TodoValidator.php',
'Utils' => '../util/Utils.php',
);
if (!array_key_exists($name, $classes)) {
die('Class "' . $name . '" not found.');
}
require_once $classes[$name];
}
这里init函数声明loadClass以加载类
public function init() {
error_reporting(E_ALL | E_STRICT);
mb_internal_encoding('UTF-8');
set_exception_handler(array($this, 'handleException'));
spl_autoload_register(array($this, 'loadClass'));
// session
session_start();
}
这里调用init,spl_autoload_register调用loadClass
$index = new Index();
$index->init();
我的问题是,既然$name没有定义或作为参数传递,它如何加载$classes数组中的所有类?一般来说,当给定的功能允许您传递回调函数以便稍后调用时,该功能已经设置了函数签名(参数和返回类型)。您可以将其视为一个API调用:读取文档并提供预期的数据。句号 在这种情况下,SPL自动加载器:
void spl\u autoload(字符串$class\u name[,字符串$file\u extensions=spl\u autoload\u extensions())
换言之:
- 函数将类名作为第一个强制参数接收
- 它接收一个文件扩展名作为第二个参数,但捕获它是可选的
- 预计它不会返回任何内容
这是一个预定义的签名:您不需要指定何时注册回调函数,因为无法更改它。未定义或使用?它是
loadClass()
参数,使用了三次,不是吗?:-?在这里调用函数时没有参数:spl_autoload_register(数组($this,'loadClass'));