PSR-0 Class Loader

3.4 版本
维护中的版本

如果你的类,或三方类库,遵循了 PSR-0 标准,你可以使用 ClassLoader 类来加载你项目中全部的类。

你可以使用 ApcClassLoaderXcacheClassLoader缓存 一个 ClassLoader 实例。

用法 

注册 ClassLoader 自动加载器是简单明了的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
require_once '/path/to/src/Symfony/Component/ClassLoader/ClassLoader.php';
 
use Symfony\Component\ClassLoader\ClassLoader;
 
$loader = new ClassLoader();
 
// to enable searching the include path (eg. for PEAR packages)
// 开启路径搜索(如,对于PEAR包)
$loader->setUseIncludePath(true);
 
// ... register namespaces and prefixes here - see below
// ... 在这里注册命名空间和前缀 - 见下文
 
$loader->register();

使用 addPrefix()addPrefixes() 来注册你的类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// register a single namespaces
// 注册一个单一的命名空间
$loader->addPrefix('Symfony', __DIR__.'/vendor/symfony/symfony/src');
 
// register several namespaces at once
// 一次注册多个命名空间
$loader->addPrefixes(array(
    'Symfony' => __DIR__.'/../vendor/symfony/symfony/src',
    'Monolog' => __DIR__.'/../vendor/monolog/monolog/src',
));
 
// register a prefix for a class following the PEAR naming conventions
// 给一个遵循PEAR命名约定的类,注册一个前缀
$loader->addPrefix('Twig_', __DIR__.'/vendor/twig/twig/lib');
 
$loader->addPrefixes(array(
    'Swift_' => __DIR__.'/vendor/swiftmailer/swiftmailer/lib/classes',
    'Twig_'  => __DIR__.'/vendor/twig/twig/lib',
));

对于大型项目,存在于 PEAR 类的子命名空间或子目录结构中的类,可以通过一个位置列表来寻找,以简化类的子集(sub-set of classes)的供给(vendoring):

1
2
3
4
5
6
$loader->addPrefixes(array(
    'Doctrine\\Common'           => __DIR__.'/vendor/doctrine/common/lib',
    'Doctrine\\DBAL\\Migrations' => __DIR__.'/vendor/doctrine/migrations/lib',
    'Doctrine\\DBAL'             => __DIR__.'/vendor/doctrine/dbal/lib',
    'Doctrine'                   => __DIR__.'/vendor/doctrine/orm/lib',
));

本例中,如果你尝试使用一个 Doctrine\Common 命名空间的类,或是其子类中的一个,autoloader将首先在 doctrine-common 目录下寻找这个类。如果没找到,它会在放弃之前,回滚到默认的 Doctrine 目录(配置中的最后一个)。命名空间的前缀之注册顺序在本例中是非常重要的。

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)