我真的没有得到 spl_autoload 的文档
bool spl_autoload_register ([ callback $autoload_function ] )
根据我的理解,当 php 遇到尚未加载的类时,它将尝试运行注册的函数。例如,
public function autoload() {
require ('nonLoadedClass.php');
}
spl_autoload_register(autoload);
$x = new nonLoadedClass();
会导致 require 运行吗?那么我还可以注册很多自动加载功能吗?
public function autoloadXXX() {...}
public function autoloadYYY() {...}
public function autoloadZZZ() {...}
spl_autoload_register('autoloadXXX');
spl_autoload_register('autoloadYYY');
spl_autoload_register('autoloadZZZ');
就教义而言,
require_once(dirname(__FILE__) . '/lib/vendor/doctrine/Doctrine.php');
spl_autoload_register(array('Doctrine', 'autoload'));
传递了一个数组,所以我猜它会尝试在 Doctrine 类中运行自动加载函数(这是必需的)?
spl_autoloader_register注册一个回调函数/方法,当您的代码尝试使用未知类时将调用该函数/方法。
A callback函数可以用多种方式描述:
- 一个简单的函数名称:
'my_function'
- 类的静态方法:
array('MyClass', 'myMethod')
- 类实例的方法:
array($myObject, 'myMethod')
在 Doctrine 的情况下,这似乎是第二种解决方案:如果使用 PHP 不知道的类,自动加载器将调用Doctrine::autoload
,将类名作为参数传递给它。
所以我还可以注册许多自动加载
功能?
是的,您可以,与spl_autoload_register :
如果必须有多个自动加载
功能,spl_autoload_register()
允许这样做。它有效地
创建一个自动加载函数队列,
并贯穿其中的每一个
它们的定义顺序。
但我们通常不会为每个类定义一个自动加载函数/方法;我认为那效率很低。
相反,我们使用自动加载函数接收的类名来决定应包含哪个文件。
例如,自动加载函数可能如下所示:
function my_autoloader($className)
{
require LIBRARY_PATH . '/' . $className . '.php';
}
诀窍是,如果您的文件以它们包含的类命名,它会立即变得容易得多;-)
这就是为什么类经常使用 PEAR 约定来命名:My_Class_Name
映射到文件My/Class/Name.php
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)