Laravel 定义没有命名空间的全局函数是正常的做法吗?

Is it normal practice, that Laravel defines global functions without namespaces?

我开始学习了Laravel 6。 在 /vendor/laravel/framework/src/Illuminate/Foundation/helpers.php 它有一些功能甚至没有命名空间!所以它占据了全局命名空间。正常吗?

是的,这是正常的并且是有意的。

您的 helpers.php 文件应该用于不属于任何其他类别的全局函数,例如字符串操作、简单计算等。

如果您注意到函数中的某种模式,您可能希望将它分成一个 class 自己的模式。

所以为了避免一些错误,所有的辅助函数都是这样包装的:

if(!function_exists('my_helper_func')) {
    function my_helper_func($param) {
        return $param;
    }
}

但是,如果其他代码应用相同的内容,这可能会与其他代码发生冲突,您的看法是正确的。这就是为什么 Laravel 最近将所有字符串和数组助手移动到一个 composer 包中,这意味着像 starts_with() 这样的全局函数应该像 \Illuminate\Suppor\Str::startsWith().

这样调用