2017-04-20 42 views
0

我的代碼來發送郵件是值傳遞給閉合功能在PHP

public function handle(UserFollowed $event) 
{ 
    $h = new \Acme\Helpers\functions(); 
    $email = $h->getUserEmail($event->followed); 

    Mail::raw('Hi, welcome user!', function ($message) { 
     $message->to($email) 
      ->subject("New follower :)"); 
    }); 

} 

這是工作完全正常。唯一的問題是我不能在函數Mail::raw內使用$email變量。

你能提出一個解決方案嗎?我很高興知道這些表情叫做什麼

p.s.我試過function ($message, $email)但它不起作用。如果我在to($email)中使用字符串而不是$ email,則它工作得很好。

在此先感謝。

回答

1

傳遞額外的參數,以將閉合你嘗試使用use

public function handle(UserFollowed $event) 
{ 
    $h = new \Acme\Helpers\functions(); 
    $email = $h->getUserEmail($event->followed); 

    Mail::raw('Hi, welcome user!', function ($message) use ($email) { 
     $message->to($email) 
      ->subject("New follower :)"); 
    }); 

} 
+0

它的工作,很快:)是這些類型的函數調用?和爲什麼他們不同於正常功能? – Eirtaza

+0

@Eirtaza - 在這裏你可以閱讀更多關於它:[匿名函數](http://php.net/manual/en/functions.anonymous.php#example-165) 它與「正常」函數沒有區別,他們也看不到家長範圍內的變數。區別僅在於匿名閉包的用法,這就是爲什麼語法不同。 – shaggy

2

您可以通過use

Mail::raw('Hi, welcome user!', function ($message) use ($email) { 
    $message->to($email) 
     ->subject("New follower :)"); 
});