如何在composer中处理PHP类的实用程序

时间:2018-05-16 09:33:31

标签: php composer-php

我有一个我在composer包中创建的类的实用程序函数列表。我可以轻松地自动加载类,但不确定如何设置实用程序类。

我的文件结构是:

composer.json
--src
    --SomeClass.php
    --utilities.php

utilities.php我设置了我的命名空间:

namespace PackageName\utilities {
    function functionName() {}
    function functionName2() {}
}

然后当我加载utilities文件时,我可以使用如下函数:

use function PackageName\utilities\{functionName, functionName2};

functionName();

我的问题是每次我想使用这个utilities文件时,我都需要它,这似乎是一个糟糕的模式。我想将它与加载此包的主应用程序以及包中的类一起使用。

我或多或少地要求使用SomeClass.php中的类文件:

namespace PackageName;

require_once 'utilities.php';

use PackageName\utilities\functionName;

class SomeClass {
    function methodName() {
      functionName();
    }
}

是否可以使用作曲家以某种方式使用父项目或在包的utilities内自动加载composer.json

编辑:我当前的composer.json文件包如下所示:

{
  "name": "packageauthor/packagename",
  ...
  "autoload": {
    "files: ["src/utilities.php"],
    "psr-0": { "PackageName_": "src },
    "psr-4": { "PackageName\\": "src" }
  }
}

和我父项目的composer.json

{
  "name": "packageauthor/project",
  ...
  "require": {
    "packageauthor/packagename": "1.0.0"
  }
}

在我的父项目中,我有index.php

require_once 'vendor/autoload.php';
use PackageName\SomeClass;
use function PackageName\utilities\functionName;

new SomeClass(); // works
functionName(); // fatal error

我知道我可以将此行添加到我的项目编辑器文件中:

"autoload": { "files: ["vendor/packageauthor/packagename/src/utilities.php"] }

但有没有办法我的包可以使用该文件而不需要和我的项目没有像这样自动加载文件?

0 个答案:

没有答案