我已经尝试了所有类别的地图,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目录中定义类,但这总是失败
<?php
include 'vendor/autoload.php';
$test = new \Bitcoin\Bitcoin($null);
?>
答案 0 :(得分:1)
您所引用的存储库已有composer.json
个文件,因此您无需使用type:package
进入repositories
,只需使用以下内容即可:
{
"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
中指定名为Bitcoin/Bitcoin.php
的类。
您的自动加载告诉Composer,在Bitcoin
中可以找到src/Bitcoin
的类,这对于此类错误:src/Bitcoin/
+ Bitcoin/Bitcoin.php
不存在。
原始自动加载告诉Composer在src/
中可能找到任何类,这对于大多数人来说也是错误的,但对于比特币类来说却是如此。即使这样可行,它也会尝试在不同目录中搜索之前在该目录中搜索大量其他类,从而浪费磁盘I / O.
我建议的最佳值将此目录限制为以Bitcoin
开头的类。