1. 程式人生 > >PHP 匿名函數(一)

PHP 匿名函數(一)

定義 之前 func 匿名函數 關於 span 改變 pan 比較

php的匿名函數是繼php5.3之後新增添的功能,在越來越多的框架支持高版本的php之後,都有使用到此功能,手冊上的解釋比較生澀難懂,那麽我們撇開手冊不談,以代碼切入,希望讓大家能更好的理解。


一、變量函數

聊匿名函數之前,我們有必要說說變量函數

1 、首先,我們定義一個普通的函數

    function test($a,$b){
       return $a+$b;
    }
    $test = test(1,2);
    echo $test;   //res = 3

2、將其改變為變量函數

    function test($a,$b){
		return $a+$b;
	}
	$test  = 'test';
	echo  $test(1,2); //res  = 3

變量函數就是把函數名賦值給一個變量,然後使用 $test() 或者有參數時$test(1,2) 如此這般來使用。


二、匿名函數

1、匿名函數定義

匿名函數,顧名思義就是沒有函數名的函數。

我們把上面例子中的函數名稱去掉就是匿名函數了,如下:

        function (){
           
        };  //這段代碼就是沒有函數名稱的匿名函數的主體部分了,切記【末尾需要加上分好】
       
        $test = function(){
           return '1111111111111';
        }; 
        
        $test  = function($a,$b){
            return $a + $b;
        };  // 這段代碼就是一個標準的匿名函數了,有函數主體,有返回值,這裏的返回值不是return,而是返回給了變量$test。

至於為什麽末尾要加分號,你可以這樣理解:

一個普通變量的賦值 $name = 'zhangsan'; 變量賦值是需要在末尾加分號的。

這裏是匿名函數,同樣也是變量的賦值,所以加上分號也好理解了。

2、匿名函數使用

           $test = function(){
               return '1111111111111';
           }; 
           echo $test(); //和變量函數一樣
        
           $test  = function($a,$b){
              return $a + $b;
           };
           echo $test(1,2); //同理,傳入參數


三、疑問(匿名函數的意義)

看到這裏,大家難免有疑問,這個變量函數我們用的都比較少,這個匿名函數視乎並沒有普通函數來的實現,那這個匿名函數存在的意義是什麽呢?

匿名函數在設計時,並不是為了跟隨模仿js而來的,php 的匿名函數主要的目的是為了這兩個功能【閉包函數】、【回調函數】。

關於閉包和回調我們下篇文章再和大家聊聊。





PHP 匿名函數(一)