composer需要并使用非类文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了composer需要并使用非类文件相关的知识,希望对你有一定的参考价值。
我是Composer的新手,我无法弄清楚如何自动加载非基于类的文件。
我尝试将文件添加到composer.json中的files
数组,然后运行composer install
但我没有运气。
我的composer.json看起来像:
{
"name": "app",
"description": "",
"require": {
"mongodb/mongodb": "^1.2"
},
"autoload":{
"files":["src/lib/config.php"]
}
}
这是基于非类的文件config.php
$foo = "Hello";
这就是我所说的:
require_once("vendor/autoload.php");
echo $foo;
以上引发了undefined variable: foo
的错误。
或者文件可能是自动加载的,也许我可能在错误的命名空间中。如果是这种情况,我将如何调用此文件。
我不同意@MarkBaker的评论。实际上文件将被自动加载,但是不可能在这些文件中声明变量。
例如,如果您在此config.php
文件中添加以下函数:
function hello()
{
echo "hello world";
}
而不是显示$foo
你会像这样调用这个方法:
hello();
你会得到预期的结果。
变量不可见的原因是文件通过Composer加载的方式:
function composerRequire4b299eb5732a472abef81c6ea06043af($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
require $file;
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
}
}
如您所见,文件在内部方法中是必需的,因此所有已定义的变量仅在此方法中具有范围,因此在此之后它们将不可见(这是PHP的工作方式)。
所以回答我们的问题,这是预期的行为。您不应该由Composer在自动加载的文件中声明任何变量。如果您需要类似的功能,则应手动要求文件。
当然我认为你不应该在配置文件中声明变量。您应该返回设置数组,然后将此数组分配给全局$config
变量(最简单的解决方案),或者使用将保存这些设置并从此类获取配置的类(例如,这样在Laravel中进行)。
以上是关于composer需要并使用非类文件的主要内容,如果未能解决你的问题,请参考以下文章
Java日志组件logback使用:加载非类路径下的配置文件并设置定时更新
使用 compose 在 AndroidView 中使用片段时崩溃
Azure 机器人微软Azure Bot 编辑器系列 : 机器人/用户提问回答模式,机器人从API获取响应并组织答案 (The Bot Framework Composer tutorial(代码片段