提问人:Leon Kardaš 提问时间:9/28/2022 更新时间:9/28/2022 访问量:48
作曲家:自动加载的文件助手 .php 已自动加载,但其中的函数未自动加载
Composer: Autoloaded file helper.php is autoloaded but the functions inside it are not
问:
我正在尝试将我自己的模拟 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我得到假
答:
1赞
Leon Kardaš
9/28/2022
#1
正如用户Foobar所建议的那样,问题出在帮助程序.php的命名空间中。由于它有一个命名空间,函数也有一个命名空间,所以我需要使用 App/Utils/baseDir() 而不是 baseDir()。 解决方案是简单地从帮助程序 .php 中删除命名空间
评论
\App\Utils\baseDir()
var_export(get_defined_functions()['user'])