函數上下文的問題
當我們將函數作為參數傳遞時,如果需要使用函數外部的變量,就必須使用 use
關鍵字。
這在 Laravel 或 Lumen 的分組路由中很常見。
請注意此處 use
關鍵字的使用是必要的:
<code class="language-php">$router->group(['prefix' => 'admin'], function() use ($router) { $router->get('users', function() { // 匹配 "/admin/users" URL }); });</code>
以上代碼摘自 Lumen 的文檔。如果使用 lambda 函數(箭頭函數)重寫這段代碼,則函數內部將可以使用函數外部的所有其他變量。
使用 Lambda 函數重寫
請注意,此處不需要使用 use
關鍵字,代碼也更加簡潔。
<code class="language-php">$router->group(['prefix' => 'admin'], fn() => ( $router->get('users', fn() => ( // 匹配 "/admin/users" URL )); ));</code>
這是 lambda 函數最重要的特性之一,它使得 lambda 函數能夠創建閉包(閉包不在本文討論範圍之內)以及許多其他函數式編程概念。
其他情況
在其他一些語言中,沒有 use
關鍵字,函數不知道其周圍的上下文。
在這種情況下,如何實現類似的行為呢?
你需要每次都將變量作為參數傳遞,但這確實不是我們想要的。
以上是Lambda和常規功能之間的實際差異(使用PHP)的詳細內容。更多資訊請關注PHP中文網其他相關文章!