我的要求可能看起来很糟糕,但是我想知道它是否可行。
我使用composer来自动加载我的课程。在其中一个类文件中,我想定义一个可以在全局命名空间中用作速记的函数。由于作曲家的要求,该类需要被命名空间。
我的问题:有什么办法可以通过微小的改动来实现这个目的吗?
<?php
namespace Jodes;
class MyClass {
public function __construct() {
echo "I am the class";
}
}
function fn(){
echo "I am a shorthand for doing stuff";
}
<?php
require_once '../vendor/autoload.php';
use Jodes\MyClass;
new MyClass();
// Jodes\fn(); // works
// fn(); // doesn't work
{
"name": "jodes/mypackage",
"autoload": {
"psr-4" : {
"Jodes\\" : "src"
}
}
}
尽管我阅读的链接数量超出了我的预期,但我已经尝试了所有我能想到的运气。
由于
答案 0 :(得分:7)
首先,如果此功能不是 MyClass 的一部分,则不应将其放在同一个文件中。惯例是将每个类(并且只有该类)放在单独的文件中。
对于像 fn()这样全球可用的辅助功能,您需要一个单独的文件。在全局命名空间中声明函数,然后使用composer的文件机制添加到您的composer项目中:
//common.php
<?php
function fn() {
// some code
}
//composer.json
"autoload": {
"files": ["path/to/common.php"]
}
这会为每个请求加载 common.php 文件,并使您的帮助程序功能可用。