2014-02-21 29 views
1

我无法访问在我的方法调用之外可用的变量。 (使用Laravel)示例:静态方法中的PHP变量范围

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函数内部的名称始终为空。如果我没有将其声明为$ global,那么我会收到警告,说明$ name根本不存在。我如何访问它?

回答

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(); 

BTW我没有测试过这一点,但它应该工作

+1

好球先生!我不知道use()关键字。像魅力一样工作。谢谢! – Anthony