感谢你来到这里
我真的很激动
盼望,能有你的支持
捐赠可扫描二维码转账支付
支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
如果你的类,或三方类库,遵循了 PSR-0 标准,你可以使用 ClassLoader
类来加载你项目中全部的类。
你可以使用 ApcClassLoader
和 XcacheClassLoader
来 缓存 一个 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 创作共用授权。