静态方法中的PHP变量范围

静态方法中的PHP变量范围,php,laravel,scope,Php,Laravel,Scope,我无法访问在方法调用之外可用的变量。(使用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',

我无法访问在方法调用之外可用的变量。(使用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根本不存在。如何访问它?

您可以使用
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()关键字。工作得很有魅力。谢谢