2017-05-29 53 views
0

變量$user在此閉包函數中爲null。我不明白爲什麼。PHP封閉中的變量爲空

routes.php文件

require_once(__DIR__ . '/classes/user.php'); 
$user = User::getInstance(); // returns a $_SESSION user or a new User() 

這不起作用

$app->group('/user', function() use ($app, $user) { 

    $app->post('/activate', function(Request $request, Response $response) { 
     $parsedBody = $request->getParsedBody(); 
     $result = $user->activate($parsedBody); // error user is null 
     return $response->withJson($result); 
    }); 
}); 

這確實

$app->group('/user', function() use ($app) { 

    $app->post('/activate', function(Request $request, Response $response) { 
     $parsedBody = $request->getParsedBody(); 
     $user = User::getInstance(); 
     $result = $user->activate($parsedBody); 
     return $response->withJson($result); 
    }); 
}); 
+0

https://stackoverflow.com/questions/18621297/php-closures-scoping-of-variables – sumit

回答

1

你需要繼承變成你的功能。

http://php.net/manual/en/functions.anonymous.php - #3

$app->group('/user', function() use ($app, $user) { 

    $app->post('/activate', function(Request $request, Response $response) use ($user) { 
     $parsedBody = $request->getParsedBody(); 
     $result = $user->activate($parsedBody); // now it shouldn't 
     return $response->withJson($result); 
    }); 
}); 
+0

啊..我真的很討厭這一點。有沒有辦法做到這一點? – jozenbasin