Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么composer需要手动生成自动加载文件?_Php_Composer Php_Autoload - Fatal编程技术网

Php 为什么composer需要手动生成自动加载文件?

Php 为什么composer需要手动生成自动加载文件?,php,composer-php,autoload,Php,Composer Php,Autoload,使用composer安装库时,它会生成一个自动加载的_classmap.php,以便将不同的名称空间与类连接起来。例如: 'PHPUnit_Framework_Assert' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert.php' 如果可以用一个简单的spl\u autoload\u register()来完成,并且每次都不需要生成新文件,那么为什么还需要这样做呢?因为生成所有类的列表以及在哪里可以找到它们是一项昂贵的任务,

使用
composer
安装库时,它会生成一个
自动加载的_classmap.php
,以便将不同的
名称空间
与类连接起来。例如:

'PHPUnit_Framework_Assert' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert.php'

如果可以用一个简单的
spl\u autoload\u register()
来完成,并且每次都不需要生成新文件,那么为什么还需要这样做呢?

因为生成所有类的列表以及在哪里可以找到它们是一项昂贵的任务,而您真的不希望每次调用autoloader时都要这样做,甚至每次都有新的要求。每次
供应商
文件夹更改时,您只需编译一次此信息,并将其存储在某个位置。这正是Composer所做的。

Composer使用带有某些功能的PSR-0/4自动加载器来注册与PSR-0/4类和自动加载器不兼容的内容

如果使用选项“优化自动加载程序(-o)”,它将生成一个类映射以获得更快的自动加载程序

参考资料


一句话:“性能”注意classmap并不是在任何情况下都更快!但这就是原因。对于小类映射,我在回答中描述的开销非常小,任何文件操作都将占用同样多的时间。对于一个拥有数千个类的类映射,如果不是所有这些类都被使用,那么在每次脚本运行时加载该映射将是相当大的开销。衡量哪种变体在应用程序中实际更快:转储优化的和常规的自动加载程序并运行性能测试。我同意你的观点,类映射可能并非在所有情况下都更快,比如搜索算法、快速排序、合并排序、冒泡排序。。。在某些情况下,每一个都比另一个更快。关键是这种方法的原因,而不是类映射的速度快或慢。您给出一个链接,说明“this”(链接)是原因,但没有说明您所指的原因。该链接指向Zend Framework 2的一个旧版本,该版本描述了自动加载-随着Composer的使用,框架驱动的自动加载的实用性正在减弱。Composer提供本机类映射加载只是为了允许自动加载旧但有用的软件包中的旧类结构。最好的方法是对名称空间类使用PSR-4,在所有其他情况下使用PSR-0。