8

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

我正在使用作曲家自动加载我的课程。在其中一个类文件中,我想定义一个可以在全局命名空间中用作简写的函数。由于作曲家的要求,该类需要命名空间。

我的问题:有什么方法可以通过细微的改动来实现这个工作吗?

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";
}

索引.php:

<?php

require_once '../vendor/autoload.php';

use Jodes\MyClass;

new MyClass();

// Jodes\fn();  // works
// fn();        // doesn't work

作曲家.json

{
    "name": "jodes/mypackage",
    "autoload": {
        "psr-4" : {
            "Jodes\\" : "src"
        }
    }
}

尽管阅读的链接比我数的多,但我已经尝试了所有我能想到的东西,但没有运气。

谢谢

4

1 回答 1

12

首先,如果这个函数不是MyClass的一部分,它不应该放在同一个文件中。约定是将每个类(并且仅该类)放在单独的文件中。

对于像fn()这样应该在全球范围内可用的辅助函数,您将需要一个单独的文件。在全局命名空间中声明函数,然后使用 composer 的文件机制添加到您的 composer 项目中:

//common.php
<?php
function fn() {
  // some code
}

//composer.json
"autoload": {
    "files": ["path/to/common.php"]
}

这将为每个请求加载您的common.php文件,并使您的辅助函数可用。

于 2015-08-06T05:49:08.040 回答