【问题标题】:PHP variable scope in a static method静态方法中的 PHP 变量范围
【发布时间】:2026-02-02 03:50:01
【问题描述】:

我无法访问在我的方法调用之外可用的变量。 (使用 Laravel)一个例子:

    print "Here is my name: $name\n";

    return Foo::find(1)->whereHas('bar', function($q) {
        global $name;
        print "Unfortunately this name is blank: " . $name;
        $q->where('name', 'like', '%' . $name . '%');
    })->first();
whereHas 函数中的

$name 始终为空。如果我不将其声明为 $global,那么我会收到 $name 根本不存在的警告。如何访问它?

【问题讨论】:

    标签: php laravel scope


    【解决方案1】:

    您可以使用 use 关键字发送对匿名函数(即闭包)的引用:

    $name = 'foo';
    return Foo::find(1)->whereHas('bar', function($q) use ($name) {
        print "Here name should be : " . $name; // foo
        $q->where('name', 'like', '%' . $name . '%');
    })->first();
    

    顺便说一句,我还没有测试过这个,但它应该可以工作

    【讨论】:

    • 拍得好,先生!我不知道 use() 关键字。像魅力一样工作。谢谢!