类映射生成器
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.3,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
类映射生成器
加载类通常是一项简单的任务PSR-0而且PSR-4标准。多亏了Symfony Claob娱乐下载ssLoader组件或Composer提供的自动加载机制,您不必手动将类名映射到实际的PHP文件。现在,PHP库通常通过Composer提供自动加载支持。
但有时你可能不得不使用没有任何自动加载支持的第三方库,因此迫使你手动加载每个类。例如,想象一个具有以下目录结构的库:
1 2 3 4 5 6 7 8 9
图书馆/├──酒吧/│├──巴兹/││└──Boo.php│└──直接给└──foo /├──酒吧/│└──直接给└──写到
这些文件包含以下类:
文件 | 类名 |
---|---|
图书馆/酒吧/巴兹/ Boo.php |
Acme \ \巴兹 |
库/酒吧/直接给 |
Acme \酒吧 |
库/ foo / bar /直接给 |
Acme \ Foo \酒吧 |
库/ foo /写到 |
Acme Foo \ |
为了使您的工作更轻松,ClassLoader组件附带了一个ClassMapGenerator类,它使创建类名到文件的映射成为可能。
生成类映射
要生成类映射,只需将类文件的根目录传递给createMap ()方法:
1 2 3
使用ob娱乐下载\组件\类加载器\ClassMapGenerator;var_dump (ClassMapGenerator::createMap (__DIR__.' /图书馆'));
给定上表中的文件和类,你应该看到如下输出:
1 2 3 4 5 6 7
Array ([Acme\Foo] => /var/www/library/foo/Bar.php [Acme\Foo\Bar] => /var/www/library/foo/bar/Foo.php [Acme\Bar\Baz] => /var/www/library/bar/baz/Boo.php [Acme\Bar] => /var/www/library/bar/Foo.php)
转储类映射
当涉及到自动加载时,将类映射写入控制台输出实际上是不够的。幸运的是,ClassMapGenerator
提供了dump ()方法将生成的类映射保存到文件系统:
1 2 3
使用ob娱乐下载\组件\类加载器\ClassMapGenerator;ClassMapGenerator::转储(__DIR__.' /图书馆',__DIR__.' / class_map.php ');
这个调用dump ()
类映射生成类映射并将其写入class_map.php
在同一目录下的文件,内容如下:
1 2 3 4 5 6
<?php返回数组(“Acme Foo \ \”= >' / var / www /图书馆/ foo /写到的,“Acme Foo \ \ \ \酒吧”= >' / var / www /图书馆/ foo / bar /直接给的,“Acme \ \酒吧\ \巴兹”= >' / var / www /图书馆/酒吧/巴兹/ Boo.php ',“Acme \ \酒吧”= >' / var / www /图书馆/酒吧/直接给的,);
不必手动加载每个文件,只需将生成的类映射注册到,例如MapClassLoader:
12 3 4 5 6 7 8 9 10 11 12
使用ob娱乐下载\组件\类加载器\MapClassLoader;$映射=包括__DIR__.' / class_map.php ';$加载程序=新MapClassLoader ($映射);$加载程序->注册();//你现在可以使用这些类:使用Acme\喷火;$喷火=新Foo ();/ /……
请注意
这个例子假设你已经有自动加载工作(例如通过作曲家或者ClassLoader组件中的其他类装入器之一。
除了转储一个目录的类映射,你还可以传递一个目录数组来生成类映射(结果实际上与上面的例子相同):
1 2 3 4 5 6
使用ob娱乐下载\组件\类加载器\ClassMapGenerator;ClassMapGenerator::转储(数组(__DIR__.' /图书馆/酒吧',__DIR__.“/图书馆/ foo”),__DIR__.' / class_map.php ');
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。