自动加载库包

  • 本文关键字:加载 composer-php
  • 更新时间 :
  • 英文 :


我已经尝试了所有的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开头的类。

相关内容

  • 没有找到相关文章

最新更新