PHP变量范围在静态方法中

时间:2014-02-21 23:00:28

标签: 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', '%' . $name . '%');
    })->first();
whereHas函数中的

$ name始终为空。如果我没有将它声明为$ global,那么我会收到一个警告,即$ name根本不存在。我如何获得它?

1 个答案:

答案 0 :(得分:2)

您可以使用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();

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