Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel匿名函数如何知道它';s参数_Php_Laravel_Anonymous Function - Fatal编程技术网

Php Laravel匿名函数如何知道它';s参数

Php Laravel匿名函数如何知道它';s参数,php,laravel,anonymous-function,Php,Laravel,Anonymous Function,考虑以下代码: $fn = FormNilai::whereHas('mataPelajaranLokalGuru',function($mlg) { $mlg->where('guru_id','=',$this->uid); })->get(); 如何将$mlg始终视为FormNilai实例?情况如何?我读了很多关于依赖注入的书,但仍然没有抓住要点 是另一部分。根据您的代码示例,您需要告诉匿名函数使用该变量,如 $uid = $this->uid; $

考虑以下代码:

$fn = FormNilai::whereHas('mataPelajaranLokalGuru',function($mlg) {
      $mlg->where('guru_id','=',$this->uid);
})->get();
如何将
$mlg
始终视为
FormNilai
实例?情况如何?我读了很多关于依赖注入的书,但仍然没有抓住要点

是另一部分。根据您的代码示例,您需要告诉匿名函数使用该变量,如

$uid = $this->uid; 
$fn = FormNilai::whereHas('mataPelajaranLokalGuru',function($mlg) use($uid)
                    {
                        $mlg->where('guru_id','=',$uid);
                    })->get();
由于该变量
uid
不在匿名函数的作用域内,因此需要使用上面代码中所示的use关键字传入该变量


您可以通过示例了解更多关于
使用
的信息。从侧面看,我意识到laravel支持php匿名风格,因此我们可以实现这样的javascript函数用法,但对于我来说,这肯定是第一次很难做到

为了便于使用,它们显示如下示例

$users = User::with(array('posts' => function($query)
{
$query->where('title', 'like', '%first%');
}))->get();
如果用户想让第三个参数填充变量,该怎么办。当我用任何全局变量替换那些“%first%”字来检查它时,它破坏了结构,我碰巧遇到了这种情况

$title = 'heirlom of marineford';
$users = User::with(array('posts' => function($query)
{
   $query->where('title', 'like', $title);
}))->get();
在搜索PHP文档后,我发现通过使用use()扩展函数块将参数传递给匿名函数的技术非常有用,因此函数将假定使用use()部分定义的所有变量


我希望这能帮助您参数
$mlg
不被视为
FormNilai
实例,它只是被视为
illumb\Database\elount\Builder
的一个实例

您可以在源代码中看到它是如何工作的。

例子: 定义接受常规参数的匿名函数:

$example = function ($arg) {
    var_dump($arg);
};

$example("hello");
您可以将参数名称更改为任何字符串,就像
$myArgument


无论参数名称是什么,输出都不会更改。

这不是依赖项注入,
$mlg
是一个
查询
实例,而不是
FormNilai
实例。您需要阅读文档,特别感谢您的解释,但我只是想知道,即使我们更改变量名,$mlg如何始终被视为Lightning\Database\Eloquent\Builder,无论变量名如何变量名取决于您定义的变量名。您必须记住匿名函数是您自己定义的。调用匿名函数时,参数将传递给匿名函数。您能用sippet解释一下吗?
$example = function ($arg) {
    var_dump($arg);
};

$example("hello");