将在自动加载的命名空间类文件中声明的函数变为全局函数


Make a function that is declared in an autoloaded, namespaced class file, into a global function

我的要求可能看起来很糟糕,但我还是想知道它是否可行。

我使用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 Jodes'MyClass;
new MyClass();
// Jodes'fn();  // 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文件,并使您的辅助函数可用。