我已经尝试了所有的classmap, psr-0, psr-4,但似乎不能得到自动加载工作时,使用一个包从git库
{
"repositories": [
{
"type": "package",
"package": {
"name": "michaeljs1990/bitcoin-php-api",
"version": "dev-master",
"source": {
"url": "https://github.com/michaeljs1990/Bitcoin-PHP-API",
"type": "git",
"reference": "master"
},
"autoload": {
"psr-0": {"Bitcoin": "src/Bitcoin"}
}
}
}
],
"require": {
"michaeljs1990/bitcoin-php-api": "dev-master"
}
}
类定义在src/Bitcoin目录中,使用命名空间Bitcoin,但这总是失败
<?php
include 'vendor/autoload.php';
$test = new BitcoinBitcoin($null);
?>
您所引用的存储库已经有一个composer.json
文件,因此没有必要为repositories
中的条目使用type:package
,简单地使用
{
"type": "vcs",
"url": "https://github.com/michaeljs1990/Bitcoin-PHP-API"
}
这将直接使用该存储库中的Composer数据,并且它会工作,因为您声明了错误的自动加载:
"autoload": {
"psr-0": {"Bitcoin": "src/Bitcoin"}
},
原文:
"autoload": {
"psr-0": { "": "src/" }
},
为了获得最佳性能,应该这样使用:
"autoload": {
"psr-0": { "Bitcoin": "src/" }
},
有什么区别?PSR-0需要尝试搜索的前缀,以及开始搜索完整类名的目录转换为路径名。在相对路径Bitcoin/Bitcoin.php
中应该有一个名为BitcoinBitcoin
的类。
您的自动加载告诉Composer, Bitcoin
类可以在src/Bitcoin
中找到,这对这个类是错误的:src/Bitcoin/
+ Bitcoin/Bitcoin.php
不存在。
原始的自动加载告诉Composer,任何类都可以在src/
中找到,这对大多数人来说也是错误的,但对比特币类来说是正确的。尽管这样做是有效的,但在搜索不同的目录之前,它会尝试在该目录中搜索大量其他类,从而浪费磁盘I/o。
我建议的最佳目录将此目录限制为以Bitcoin
开头的类。