为什么可以从所有名称空间访问 laravel 个助手?

Why laravel helpers accessible from all namespaces?

到目前为止,我看到有两个文件具有使用 composer autoloader 加载的功能。

 "autoload": {
         "files": [
             "src/Illuminate/Foundation/helpers.php",
             "src/Illuminate/Support/helpers.php"
        ],

然后在自动加载器中:

function composerRequire69685de7f834ebe45f1e02416f8679f0($fileIdentifier, $file)
{
    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
        require $file;

        $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
    }
}

但实际上它只需要这个文件,所有的功能都只到全局命名空间。你能解释一下为什么最终所有这些功能都可以从所有名称空间访问吗?

这是因为 composers psr-4 的自动加载功能。 在 composers autoload 的文件部分中,您正在定义它应该自动加载的文件。因此,让我们在其中一个文件中考虑一个名为 "calculate" 的函数。当您现在调用计算时,作曲家知道它在哪些文件中找到该函数。如果您要从自动加载中删除文件,函数调用将停止工作。

这就是帮助程序在所有命名空间中工作的原因:

For functions and constants, PHP will fall back to global functions or constants if a namespaced function or constant does not exist.

PHP docs