簡體   English   中英

在自定義作曲家程序包中調用函數時,“調用未定義函數”

[英]“Call to undefined function” when calling a function in custom composer package

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.

安裝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

的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存儲庫作為獲取軟件包的地方)?

PHP不會自動加載功能。 使用files自動加載器 ,例如:

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

或將它們封裝在一個類中並自動加載,例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM