作曲家:自动加载的文件助手 .php 已自动加载,但其中的函数未自动加载

Composer: Autoloaded file helper.php is autoloaded but the functions inside it are not

提问人:Leon Kardaš 提问时间:9/28/2022 更新时间:9/28/2022 访问量:48

问:

我正在尝试将我自己的模拟 MVC 框架作为一个项目。这是我第一次使用 composer 来要求 Laravel 的依赖项。实际的自动加载效果很好,但是当我尝试自动加载帮助程序.php时,发生了一些奇怪的事情。文件是自动加载的(如果我更改文件的路径,我会收到找不到文件错误),但其中的内容不是。在另一个文件中,我尝试从帮助程序.php文件中调用任何函数,然后得到

致命错误:未捕获的错误:调用未定义的函数

这是示例的文件结构

  • composer.json
  • 应用程序
    • 实用性
      • 帮助程序.php
  • 公共
    • 索引.php

这是我的composer.json文件:

{
    "name": "admin/projecttest",
    "autoload": {
        "psr-4": {
            "Admin\\Projecttest\\": "src/",
            "App\\": "App/"
        },
        "files": [
            "App/Utils/helpers.php"
        ]
    },
    "minimum-stability": "dev"
}

帮助程序.php

<?php

namespace App\Utils;

use Leonlav77\Frejmcore\helpers\DotEnv;

function config($config){
   $config = explode(".", $config);
   $file = $config[0];
   $configFile = require "../config/$file.php";
   return $configFile[$config[1]];
}

function env($key, $default = null){
   (new DotEnv(__DIR__ . '../../.env'))->load();
   return getenv($key) ? getenv($key) : $default;
}

function baseDir(){
   return __DIR__ . "/../";
}

index.php(我从帮助程序调用函数)

<?php

require "../vendor/autoload.php";


var_dump(function_exists('baseDir'));
var_dump(baseDir());

从function_exists我得到假

编写器-php 自动加载

评论

3赞 Foobar 9/28/2022
您的函数有一个命名空间,因此请在 index.php 中使用:。在需要之后亲自查看。\App\Utils\baseDir()var_export(get_defined_functions()['user'])

答:

1赞 Leon Kardaš 9/28/2022 #1

正如用户Foobar所建议的那样,问题出在帮助程序.php的命名空间中。由于它有一个命名空间,函数也有一个命名空间,所以我需要使用 App/Utils/baseDir() 而不是 baseDir()。 解决方案是简单地从帮助程序 .php 中删除命名空间