代码之家  ›  专栏  ›  技术社区  ›  Andrew M. Andrews III

在自定义编写器包中调用函数时“调用未定义函数”

  •  0
  • Andrew M. Andrews III  · 技术社区  · 6 年前

    PHP专家!我正在尝试根据PHP的方式(使用7.0)使代码更加模块化,这是我第一次尝试创建自己的namespace+composer package+git repository组合。

    我的包目录:

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

    myfunc.php文件:

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

    包目录/composer.json:

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

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

    composer安装后的我的项目目录:

    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
    

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

    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 回复  |  直到 6 年前
        1
  •  4
  •   Sammitch    6 年前

    PHP不自动加载函数。使用 files autoloader 例如:

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

    或者将它们封装在类中并自动加载,例如:

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