发送邮件时未定义的变量$ email - 即使该变量存在?

jov*_*van 2 php laravel laravel-4

我有一系列电子邮件,我需要在Laravel 4.2中发送消息.这个数组是

$email_arr = ["me@yahoo.com","friend@gmail.com"]
Run Code Online (Sandbox Code Playgroud)

现在我的逻辑是简单地遍历电子邮件阵列并向每个人发送消息,如下所示:

foreach($email_arr as $email){
            Mail::send('emails.invite', array('pool_code' => 'test'), function($message) {
                $message->to($email)->subject('Join my capture pool!');
            });
        }
Run Code Online (Sandbox Code Playgroud)

但是,我得到一个指向$message->to($email)->subject('Join my capture pool!');哪个错误的错误Undefined variable: email.

我觉得这很奇怪,因为变量显然存在,如果我echo $email在循环中它正确地打印出每个电子邮件.

那么这里发生了什么?

Ren*_*rss 12

你有匿名函数(也就是闭包),$email它的范围不具备.

闭包(匿名函数)也可以从父作用域继承变量.必须将任何此类变量传递给use语言构造.

你必须添加use到这个功能.

foreach($email_arr as $email){
    Mail::send('emails.invite', array('pool_code' => 'test'), function($message) use($email) {
        $message->to($email)->subject('Join my capture pool!');
    });
}
Run Code Online (Sandbox Code Playgroud)