我的要求可能看起来很糟糕,但我还是想知道它是否可行。
我使用composer来自动加载我的类。在其中一个类文件中,我想定义一个函数,它可以在全局命名空间中用作简写。由于编写者的要求,类需要命名空间。
我的问题:是否有任何方式通过微小的改变,我可以得到这个工作?
MyClass.php:
<?php
namespace Jodes;
class MyClass {
public function __construct() {
echo "I am the class";
}
}
function fn(){
echo "I am a shorthand for doing stuff";
}
index . php:
<?php
require_once '../vendor/autoload.php';
use JodesMyClass;
new MyClass();
// Jodesfn(); // works
// fn(); // doesn't work
composer.json
{
"name": "jodes/mypackage",
"autoload": {
"psr-4" : {
"Jodes\" : "src"
}
}
}
我已经尝试了所有我能想到的没有运气的东西,尽管阅读的链接多得我都数不清。
谢谢
首先,如果这个函数不是MyClass的一部分,它不应该放在同一个文件中。惯例是把每个类(而且只有那个类)放在单独的文件中。
对于像fn()这样的辅助函数,它应该是全局可用的,你需要一个单独的文件。在全局命名空间中声明该函数,然后使用composer的文件机制添加到编写器项目中://common.php
<?php
function fn() {
// some code
}
//composer.json
"autoload": {
"files": ["path/to/common.php"]
}
这将为每个请求加载您的common.php文件,并使您的辅助函数可用。