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關鍵字來繼承作用域外的變量,具體實例如下:
<?phpfunction getCounter() { $i = 0; return function() use($i) { echo ++$i; };}$counter = getCounter();$counter();$counter();輸出:1 12、Laravel框架中的應用 在Laravel框架中大量地使用了匿名函數,如在服務提供者注冊過程中,通過將服務名稱與提供服務的匿名函數進行綁定,在使用時可以實現動態服務解析。這里所有的服務可以通俗地理解為一種資源的提供,這個字段可以是一個類的實例、一個路徑或是一個文件等,提供服務就是提供一種資源。具體實例如下:
文件 Illuminate/Routing/ControllerServicePRovider.php
<?phpnamespace 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與后面的提供服務的匿名函數綁定起來,用于服務解析,服務就是通過匿名函數實現的。
新聞熱點
疑難解答
圖片精選