2013-05-08 45 views
1

過去幾天我一直在玩Silex。我無法理解下面的代碼片段如何工作。PHP Silex微框架語法解釋

我對不感興趣什麼它確實,而是如何它做到了。

use Silex\Application; 
    use Symfony\Component\HttpFoundation\Request; 
    use Symfony\Component\HttpKernel\HttpKernelInterface; 

    $app->get('/foo', function (Application $app, Request $request) { 
     $subRequest = Request::create('/', ...); 
     $response = $app->handle($subRequest, HttpKernelInterface::SUB_REQUEST, false); 

     return $response; 
    }); 

我弄糊塗各地

function (Application $app, Request $request) 

從我的理解這是一個匿名函數被調用作爲參數傳遞給$ APP-> get方法。這個匿名函數中的兩個參數是如何工作的?具體是什麼:

Application $app, Request $request

謝謝!

+0

你認爲它有什麼作用?你有沒有看過以前看起來像這樣的東西?也許在類方法或其他功能? – ircmaxell 2013-05-08 20:10:17

+0

我有我的懷疑,但不知道是否可以在OOP中使用typehinting。 – Carvefx 2013-05-09 20:43:53

回答

9

控制器參數填充的隱含方式可能是silex中最令人困惑的部分之一。

當您通過某個HTTP動詞方法定義控制器時,該控制器可以向其參數添加類型提示。 RequestApplication是兩個參數$app$request的類型提示。

HttpKernel是負責調用控制器的Silex的一部分。它使用ControllerResolver來確定要傳入哪些參數。ControllerResolver將從類型提示中推斷參數。

  • 對於Silex\Application類型的提示,它將注入應用程序。
  • 對於Symfony\Component\HttpFoundation\Request類型提示,它將注入當前請求。

如果您想更好地瞭解,我建議您閱讀the HttpKernel source code

+0

你的回答有點深入那麼我在找什麼,我只是對語法感興趣:)這個:http://php.net/manual/en/language.oop5.typehinting.php是我的尋找。謝謝! – Carvefx 2013-05-09 20:43:01