1. 程式人生 > >Laravel框架中常用PHP語法-匿名函式

Laravel框架中常用PHP語法-匿名函式

Laravel框架之所以被稱為優雅的框架,是因為他在框架中使用大量的PHP新語法,包括名稱空間、匿名函式、反射機制、後期靜態繫結等,才使得Laravel框架顯得簡潔易擴充套件。

匿名函式

匿名函式(Anonymous functions)也叫閉包函式(Closure),即一個沒有指定名稱的函式,經常用作回撥函式引數(callback)的值。

1、匿名函式的使用
通常我們在呼叫函式時,傳入的引數是資料,那麼只能通過引數對函式的結果進行控制,無法控制其過程,而匿名函式的存在既可以作為引數傳給函式,也可以作為變數賦值,進行控制函式的執行過程,因此,匿名函式的引入增強了程式編寫的靈活性,可以實現更加高效的設計方案。下面給出相應的例項:

<?php
$array = array(1,2,3,4);
//array_walk 使用使用者自定義函式對陣列中的每個元素做回撥處理
array_walk($array, function($value){echo $value});

輸出: 1 2 3 4

匿名函式的另一個作用是可以從父作用域中繼承變數,即匿名函式在定義的時候如果需要使用作用域外的變數,可以使用use關鍵字來繼承作用域外的變數,具體例項如下:

<?php

function getCounter() {
    $i = 0;
    return function() use($i) {
        echo
++$i; }; } $counter = getCounter(); $counter(); $counter(); 輸出:1 1

2、Laravel框架中的應用
在Laravel框架中大量地使用了匿名函式,如在服務提供者註冊過程中,通過將服務名稱與提供服務的匿名函式進行繫結,在使用時可以實現動態服務解析。這裡所有的服務可以通俗地理解為一種資源的提供,這個欄位可以是一個類的例項、一個路徑或是一個檔案等,提供服務就是提供一種資源。具體例項如下:

檔案 Illuminate\Routing\ControllerServiceProvider.php

<?php
namespace
Illuminate\Routing; use Illuminate\Support\ServiceProvider; class ControllerServiceProvider extends ServiceProvider { //註冊服務提供者 public function register() { $this->app->singleton('illuminate.route.dispatcher', function($app){ return new ControllerDispatcher($app['router'], $app); }); } }

從上面例子中可以看出,這裡的$this->app->singleton()函式的作用是將服務名illuminate.route.dispatcher與後面的提供服務的匿名函式繫結起來,用於服務解析,服務就是通過匿名函式實現的。