回调函数中带有变量的PHP错误

vli*_*o20 2 php scope laravel

我在php(laravel)中有这个功能:

    public static function isUserParticipatesInTournament($tourId, $userId)
    {
        var_dump($userId); //dumped
        $user = User::find($userId);

        if(!$user)
        {
            return null;
        }

        $obj = $user->whereHas('tournaments', function($query)
        {
            var_dump($tourId); //error
            $query->where('id', '=', $tourId); //error
        })->get();

        return $obj;
    }
Run Code Online (Sandbox Code Playgroud)

问题是在闭包$obj = $user->whereHas('tournaments', function($query){...}$tourId变量是未定义的.我收到这个错误: Undefined variable: userId.

为什么会这样?变量在内部函数的范围内声明.我唯一的想法是,它是一个回调函数.

当我尝试执行此函数时:$obj = $user->whereHas('tournaments', function($query, $tourId){...}然后我收到此异常:

Missing argument 2 for User::{closure}()
Run Code Online (Sandbox Code Playgroud)

Chr*_*isC 7

您的$tourId变量不在匿名函数的范围内.查看use关键字以了解如何将其添加到范围中.请参阅此页面上的示例3:http://www.php.net//manual/en/functions.anonymous.php

它应该类似于以下内容:

$obj = $user->whereHas('tournaments', function($query) use($tourId)
    {
        var_dump($tourId); // Dumps OK
    })->get();
Run Code Online (Sandbox Code Playgroud)