① php沒有函數名的函數什麼時候需要用到呢
沒有函數名的函數也就是匿名函數,通常在定義後就立即使用,比如當某個函數要求參數也是函數時,就可以用一個匿名函數傳遞進去,然後那個函數就會立刻調用它了,比如//這段代碼用於過濾數組,篩選數組中的所有偶數:
$a1=array(1,2,3,4,5,6,7,8,9);
$a2=array_filter($a1,function($v){
return$v%2==0;
});
print_r($a2);
也可以把匿名函數賦值給一個變數,以後調用這個變數就相當於執行了這個函數:
$f=function($x,$y){
return$x+$y;
};
echo$f(1,2);
② 匿名函數的好處
匿名函數出現在 matlab 中。它是matlab中定義的一種函數形式。
匿名函數的作用(好處):匿名函數的作用:主要實現自己定義matlab中的函數,從而擴大函數的使用功能。
函數簡介:匿名函數不以文件形式駐留在文件夾上;他的生成方式最簡捷,可在指令窗或任何函數體內通過指令直接生成。
和內聯函數(inline)相比,匿名函數的優越性在於可以直接使用workspace中的變數,不必申明,非常適合嵌入到M文件中。
%例10-25 匿名函數舉例。
%本例列舉3個匿名函數的例子,分別有0個、1個和兩個輸入參數。
%首先介紹沒有輸入參數的匿名函數,只需用空格代替arglist即可。例如,編寫求解當前時間的匿名函數如下所示。
>> t = @() datestr(now);
t() %函數的調用
ans =
14-Sep-2004 20:22:50
%值得注意的是,調用該函數時,括弧不能省略,否則, MATLAB 7.1將對程序不予計算,如下所示。
>> t
t =
@() datestr(now)
>>
%再介紹有一個輸入參數的匿名函數,該函數用於求所輸入參數的平方,編制並運行程序如下所示。
>> sqr = @(x) x.^2
sqr =
@(x) x.^2
>> sqr(12)
ans =
144
>>
%最後介紹有兩個輸入參數的匿名函數,用戶可以由此推導有多個參數的匿名函數,編制並運行程序如下所示。
>> sumAxBy = @(x, y) (14*x + 41*y)
sumAxBy =
@(x, y) (14*x + 41*y)
>> sumAxBy(3,7)
ans =
329
>>
注意這些定義過程,其中@這個標志符是很重要的。
③ 什麼是lambda表達式
lambda表達式,也可稱為closure(閉包),通常是在需要一個函數,但又不想費神去命名一個函數的場合下使用,也就是指匿名函數。由於其幾乎被所有主流開發語言支持。
是java8新引入的一種語法,是一種緊湊的傳遞代碼的方式。
使用lambda表達式可以使代碼變的更加簡潔緊湊。
lambda允許把函數作為一個方法的參數(函數作為參數傳遞進方法中)。
以下是lambda表達式的重要特徵:
可選類型聲明:不需要聲明參數類型,編譯器可以統一識別參數值。
可選的參數圓括弧:一個參數無需定義圓括弧,但多個參數需要定義圓括弧。
可選的大括弧:如果主體包含了一個語句,就不需要使用大括弧。
可選的返回關鍵字:如果主體只有一個表達式返回值則編譯器會自動返回值,大括弧需要指定明表達式返回了一個數值。
PHP 5.3
PHP5.3增加了Lambda的支持,對於接受回調函數的PHP函數來說,lambda表達式非常方便。比如使用array_map函數遍歷數組,並將回調結果重新賦值給數字各元素。
Javascript
javascript中的lambda表達式通常稱為匿名函數,如果你使用過jquery庫,那麼你肯定知道匿名函數,這里主要作為回調函數使用。
④ PHP的幾種函數參數類型及一些特殊函數
給你整理如下:
默認參數:在函數聲明時給參數賦值,而且此默認參數只能在最後,調用時可不傳遞任何參數(若只有默認參數的情況下)
可變參數:一個函數可能需要可個可變數目的參數。在php中,提供了三個函數用於檢索函數中所傳遞的參數。func_get_args()返回一個提供提供給函數的所有參數的數組;func_num_args()返回提供給函數的參數數目;func_get_arg()返回一個來自參數的特定參數。具體如下:
$array = func_get_args();
$count = func_num_args();
$value = func_get_arg();
遺漏參數:當調用函數時,可以傳遞任意個參數給函數。當函數必要的參數沒有i被傳遞時,此參數值是空,並且PHP會為每個遺漏的參數發出警告
可變函數:使用可變變數,可以基於變數的值調用函數
匿名函數:又叫閉包函數,允許臨時建立一個沒有指定名稱的函數,最經常用作回調函數參數的值。需要注意的是,在匿名函數內的變數的用法不同於全局變數,在匿名函數內的變數是一個閉包變數,另外,被調用閉包的作用域不必是相同的。
⑤ php匿名函數
$顯然是變數,你這里是把匿名函數,把函數賦值給變數,$greet表示一個函數,但不是函數名。匿名函數多用於臨時創建的簡易函數。
⑥ php函數function中return問題:
return 是要返回函數調用後的結果, 就是比如 $a = fun(); 如果fun()里有值就可以把這個函數賦值給一個變數,如果沒有return 就不能賦值給變數。
function 里的 $a 和外面的$a不是一個值, function里的是局部變數,只在function里起作用。如果你直接echo $a 而沒有寫 $a=_pr(6,9); 是會報錯的。你也可以寫成$b = _pr(6,9);得到的值也是一樣