創建函數時,我已經在各種編碼示例中看到了不同的編碼風格。
是什麼VS
function provider(){ code here }
創建使用
$provider = function() { code here }
函數之間的區別是第一個例子簡單的短版:$data = provider();
?
我們什麼時候使用第一個例子?
創建函數時,我已經在各種編碼示例中看到了不同的編碼風格。
是什麼VS
function provider(){ code here }
創建使用
$provider = function() { code here }
函數之間的區別是第一個例子簡單的短版:$data = provider();
?
我們什麼時候使用第一個例子?
不,它不是。第一個代碼是closure的聲明,即匿名函數。它沒有名字,可以用保存它的標識符來調用。第二個示例是normal function(用戶定義的函數,更具體),因此它可以通過它的名稱在所有作用域內訪問,而不像閉包,只能在定義的範圍內調用。
如你願意,你可以有很多倒閉 - 它們只是調用實體,例如這是有效的:
$provider = function() { Code here }
$another = function() { Code here } //same code
-and呼籲$provider
(例如,與call_user_func())將有無關$another
另一個顯著不同的是,封閉能接受上下文參數像:
$provider = function() use ($param1, $param2, ...) { Code here }
-so在它的身體內上下文參數將可用。上下文參數不像通常的參數 - 因爲上下文參數定義和存在與閉包無關,而參數在此時被計算,發生呼叫時。
第一個聲明是匿名函數。在賦值之後,我們有名稱爲$ provider的變量,並且可以調用$ provider()。第二個聲明只是它的正常函數。 匿名功能可以是用戶例如了在array_map,array_filter.For例如
$a = array(1, 2, 3, 4, 5);
$res = array_filter(
$a, function ($elem) {
return $elem > 3;
}
);
print_r($res);
輸出元件誰更大3
'$提供商=函數(){...}'創建一個變量名爲$提供商可以作爲參數傳遞給其他函數;但它本身也是一個可執行的功能。 –