php function() use() 用法问题 报了一个错误

我使用function() use() 是希望函数如果执行时候给了参数值就用给定的,如果没给就用use()里面的值

$name = 'xiaochuan';
$age=18;
$test = function ($name,$age) use ($name,$age) {
    echo $name;
    echo '<br>';
    echo $age;
};
$test('xiaomi',10);
$test();

但是结果给我报了一个错误,
Fatal error: Cannot use lexical variable $name as a parameter name,
不知道为什么,请教下能不能这样用,是不是funtion()里面不能带参数的?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案
    public function test()
    {
        $name = 'xiaochuan';
        $age=18;
        // 错误是因为,funciton里面的参数和use的参数重名了,这样,函数内部不知道$name代表的是哪个$name了
        $test2 = function ($name2,$age2) use ($name,$age) {
            echo $name;
            echo '<br>';
            echo $age;
        };
        $test2('xiaomi',10);
//        $test2();// 这个代码是有问题的,没有传入参数是不行的,除非,上面的函数有默认的参数,如,指定$name2=null,$age2=null
        // 输出结果:
        // xiaochuan
        // 18
    }

file

3年前 评论
讨论数量: 6

好像不能传的参数和use传的参数一样

3年前 评论
donggan (楼主) 3年前

你的变量名称重复了, php 怎么知道你的$name是形参还是外部变量. 正如提示所说, 不能使用词法变量$name作为参数名

3年前 评论
fatrbaby 3年前
    public function test()
    {
        $name = 'xiaochuan';
        $age=18;
        // 错误是因为,funciton里面的参数和use的参数重名了,这样,函数内部不知道$name代表的是哪个$name了
        $test2 = function ($name2,$age2) use ($name,$age) {
            echo $name;
            echo '<br>';
            echo $age;
        };
        $test2('xiaomi',10);
//        $test2();// 这个代码是有问题的,没有传入参数是不行的,除非,上面的函数有默认的参数,如,指定$name2=null,$age2=null
        // 输出结果:
        // xiaochuan
        // 18
    }

file

3年前 评论

不报错才怪

3年前 评论

报错提示已经写的非常清楚了,use 传入的变量和参数变量不能重复

3年前 评论
playmaker

啧啧啧 但凡翻译一下

3年前 评论

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