【问题标题】:Why laravel helpers accessible from all namespaces?为什么可以从所有命名空间访问 laravel 助手?
【发布时间】:2019-04-01 17:31:24
【问题描述】:

到目前为止,我看到有两个文件包含使用 Composer 自动加载器加载的函数。

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

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

【问题讨论】:

    标签: laravel composer-php helper autoloader


    【解决方案1】:

    这就是为什么助手可以在所有命名空间中工作的原因:

    对于函数和常量,PHP 将回退到全局函数 如果命名空间函数或常量不存在,则为常量。

    PHP docs

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我知道。 Composer 自动加载文件非常简单,由 70 行代码组成,所以我试图了解它是如何工作的。
      • 你应该看看这个视频:youtube.com/watch?v=84j61_aI0q8
      猜你喜欢
      • 2013-12-06
      • 2017-12-27
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      • 2016-03-19
      • 2020-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多