FileSystem中的getRequire函数为什么要这么写?

1. 运行环境

1). 当前使用的 Laravel 版本?8.75

2. 问题描述?

public function getRequire($path, array $data = [])
    {
        if ($this->isFile($path)) {
            $__path = $path;
            $__data = $data;

            return (static function () use ($__path, $__data) {
                extract($__data, EXTR_SKIP);

                return require $__path;
            })();
        }

        throw new FileNotFoundException("File does not exist at path {$path}.");
    }

我的疑问一:为什么要创建两个新变量$__path $__data
我的疑问二:为什么要创建一个静态匿名函数来执行这两行代码,而不是直接执行这两行,有什么区别?
我知道的是,使用静态匿名函数的话,就可以不用绑定$this。

3. 您期望得到的结果?

希望有人能为我解释这两个疑问

4. 我的结论

看了 振翅飞翔 和 deatil 的解答,我明白了一些,我原来没有想到变量污染的问题。一想到这点,我又看到extract函数的第二个参数是EXTR_SKIP,我想我明白了。不用匿名函数,如果extract出来的变量里有path和data,就会因为当前环境中已经存在而被忽略,这不是想要的结果。用了匿名函数就没有这个问题了,因为当前环境中只有__path__data这两个变量。

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 7

放到匿名函数里面是为了防止 extract 出来的变量污染到了 pathdata 这两个变量

3年前 评论

静态匿名函数就是以前创建的单独的函数用新特征来重构的

单独创建变量是为了防止数据污染吧,引入的文件里就不能直接用$data这个变量。
好像前面楼说的防止污染原始的两个变量

3年前 评论
Falcon (楼主) 3年前
deatil (作者) 3年前
deatil (作者) 3年前
Falcon (楼主) 3年前
deatil (作者) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!