热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

传递class自动映射php,ClassMapGenerator(类映射生成器)

若提供了PSR-0和PSR-4标准,要加载一个类通常是很容易的事。得益于Symfony的ClassLoader组件,以及Composer的自动加载架构&

若提供了 PSR-0 和 PSR-4 标准,要加载一个类通常是很容易的事。得益于Symfony的ClassLoader组件,以及Composer的自动加载架构,你毋须手动映射你的类名称到其真实文件上。如今,PHP类库普遍都能通过Composer实现对自动加载的支持。

但是你仍然有可能用到“不支持任何自动加载”的第三方类库,并因此迫使你手动加载每一个类。例如,设想一个拥有如下目录结构的类库:

1

2

3

4

5

6

7

8

9library/

├── bar/

│ ├── baz/

│ │ └── Boo.php

│ └── Foo.php

└── foo/

├── bar/

│ └── Foo.php

└── Bar.php

这些文件包含以下的类:

File(文件)

Class Name(类名)

library/bar/baz/Boo.php

Acme\Bar\Baz

library/bar/Foo.php

Acme\Bar

library/foo/bar/Foo.php

Acme\Foo\Bar

library/foo/Bar.php

Acme\Foo

为了令你坦然面对,ClassLoader组件内置了

生成类映射 ¶

要生成类映射,只需把你的类文件所在的根目录传入

1

2

3use Symfony\Component\ClassLoader\ClassMapGenerator;

var_dump(ClassMapGenerator::createMap(__DIR__.'/library'));

根据上表中给定的文件和类,你应该能看到如下的输出:

1

2

3

4

5

6

7Array

(

[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

)

剥离类映射 ¶

要使用自动加载,光把类映射(class map)输出到命令行是不够的。好在, ClassMapGenerator 提供的

1

2

3use Symfony\Component\ClassLoader\ClassMapGenerator;

ClassMapGenerator::dump(__DIR__.'/library', __DIR__.'/class_map.php');

这个 dump() 调用,生成类映射并后将其写入相同目录下的 class_map.php 文件,文件内容如下:

1

2

3

4

5

6

'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',

);

不同于每次手动加载文件,你要做的只是把已生成的类映射,注册到

1

2

3

4

5

6

7

8

9

10

11

12use Symfony\Component\ClassLoader\MapClassLoader;

$mapping = include __DIR__.'/class_map.php';

$loader = new MapClassLoader($mapping);

$loader->register();

// you can now use the classes: / 现在你可以使用类了

use Acme\Foo;

$foo = new Foo();

// ...

本例假设你的自动加载已经可以使用(比如通过 Composer 或来自ClassLoader组件的其他加载器)。

除了在一个目录中剥离出类映射,你还可以传入一个目录数组,用于生成类映射(结果完全与上例是一样的):

1

2

3

4

5

6use Symfony\Component\ClassLoader\ClassMapGenerator;

ClassMapGenerator::dump(

array(__DIR__.'/library/bar', __DIR__.'/library/foo'),

__DIR__.'/class_map.php'

);



推荐阅读
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 掌握PHP框架开发与应用的核心知识点:构建高效PHP框架所需的技术与能力综述
    掌握PHP框架开发与应用的核心知识点对于构建高效PHP框架至关重要。本文综述了开发PHP框架所需的关键技术和能力,包括但不限于对PHP语言的深入理解、设计模式的应用、数据库操作、安全性措施以及性能优化等方面。对于初学者而言,熟悉主流框架如Laravel、Symfony等的实际应用场景,有助于更好地理解和掌握自定义框架开发的精髓。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • 本文详细介绍了在MyBatis框架中如何通过#和$两种方式来传递SQL查询参数。使用#方式可以提高执行效率,而使用$则有助于在复杂SQL语句中更好地查看日志。此外,文章还探讨了不同场景下的参数传递方法,包括实体对象、基本数据类型以及混合参数的使用。 ... [详细]
  • 宝塔面板下启用HTTPS的详细指南
    本文提供了在宝塔面板环境中配置HTTPS的具体步骤,确保您的网站通信更加安全可靠。 ... [详细]
  • 本文将详细介绍Fuel CMS如何基于CodeIgniter框架构建,包括其单入口模式的实现方式及关键配置文件的作用。通过分析本地环境中的index.php和.htaccess文件,我们将更好地理解Fuel CMS的核心架构。 ... [详细]
  • 本文提供了一个详尽的前端开发资源列表,涵盖了从基础入门到高级应用的各个方面,包括HTML5、CSS3、JavaScript框架及库、移动开发、API接口、工具与插件等。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ... [详细]
  • 本文详细介绍了Android系统的四层架构,包括应用程序层、应用框架层、库与Android运行时层以及Linux内核层,并提供了如何关闭Android系统的步骤。 ... [详细]
  • mybatis 详解(七)一对一、一对多、多对多
    mybatis详解(七)------一 ... [详细]
  • Spring 中策略模式的应用:Resource 接口详解
    本文探讨了在 Spring 框架中如何利用 Resource 接口实现资源访问策略。Resource 接口作为资源访问策略的抽象,通过多种实现类支持不同类型的资源访问。 ... [详细]
  • 掌握DSP必备的56个核心问题,我已经将其收藏以备不时之需! ... [详细]
author-avatar
LA_Lam霸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有