在自定义作曲家程序包中调用函数时,“调用未定义函数”

时间:2018-11-09 19:50:19

标签: php namespaces composer-php

PHP专家!我正在尝试根据PHP的方式(使用7.0)使代码更具模块化,这是我第一次创建自己的命名空间+作曲者软件包+ git存储库组合的实验。

我的包裹目录:

packagedir
|__src
|   |__myfunc.php
|__composer.json

myfunc.php:

namespace MyNS\MySubNS;
function myfunc() { return 1; }

packagedir / composer.json:

{
  "name": "myns/mysubns",
  ...
  "autoload": {
    "psr-4": { "MyNS\\MySubNS\\": "src" }
  }
}

全部签入存储库packagedir/.git.

在安装作曲家之后我的项目目录:

public_html
|__vendor
|   |__composer
|   |   |__ [all the usual autoload_* stuff, etc.]
|   |__myns
|   |   |__mysubns 
|   |       |__src
|   |       |   |__myfunc.php
|   |       |__composer.json
|   |__autoload.php
|__composer.json
|__composer.lock
|__index.php

public_html / composer.json:

{
  "require": {
    "myns/mysubns": "dev-master"
  },
  "repositories": [
    { "type": "git",
      "url": "file:///path/to/packagedir/.git" }
  ]
}

index.php:

ini_set('display_errors','1');
require_once 'vendor/autoload.php';
echo \MyNS\MySubNS\myfunc();

看来composer已将软件包安装在vendor中,并且autoload_ps4.php包括:

return array(
    'MyNS\\MySubNS\\' => array($vendorDir . '/myns/mysubns/src'),
);

但是我得到了

( ! ) Fatal error: Uncaught Error: Call to undefined function MyNS\MySubNS\myfunc() in /var/www/public_html/index.php on line 3
( ! ) Error: Call to undefined function MyNS\MySubNS\myfunc() in /var/www/public_html/index.php on line 3

任何人都可以看到我在做什么错(除了建议不要将.git存储库用作获取软件包的地方)?

1 个答案:

答案 0 :(得分:3)

PHP不会自动加载功能。使用files autoloader,例如:

{
    "autoload": {
        "files": ["src/MyLibrary/functions.php"]
    }
}

或将它们包含在类中并自动加载,例如:

namespace foo;
class Helper {
    public static function foo() { ... }
}