Php 当我进入另一个闭包时,为什么我的变量没有定义?

Php 当我进入另一个闭包时,为什么我的变量没有定义?,php,laravel,Php,Laravel,我在Laravel 4.2应用程序中有此功能,作为计划命令的一部分。在PHPStorm中,只要输入Mail::Send(){}闭包,我就无法再引用当前的$request变量,因此无法使用它来查找用于发送消息的附加用户或请求数据。这是为什么?我如何定义和访问变量 public function fire() { $requests = DataRequest::all(); foreach($requests as $request) { if($requ

我在Laravel 4.2应用程序中有此功能,作为计划命令的一部分。在PHPStorm中,只要输入Mail::Send(){}闭包,我就无法再引用当前的$request变量,因此无法使用它来查找用于发送消息的附加用户或请求数据。这是为什么?我如何定义和访问变量

public function fire()
{
    $requests = DataRequest::all();

    foreach($requests as $request)
    {
        if($request->status != "Completed")
        {
            Mail::send('emails.incompleteRequest', array('request' => $request), function($message)
            {
                //By this point, $request is not defined
                $requestid = $request->id;
                $user = RequestUser::where('userid', '=', $request->userid)->first();
                $message->to($user->email,$user->first_name . " " . $user->last_name)->subject('New Request Created');

            });
        }
    }
}

这是PHP。变量的作用域仅限于本地,并且不由“子”函数继承。闭包仍然是一个函数,正常的PHP范围规则适用。如果希望
$request
变量可用,则必须使其可用:

Mail::send([..snip..], function($message) use ($request) { ... }
                                          ^^^^^^^^^^^^^^^