php閉包有什麼用?

青灯夜游
發布: 2023-02-26 08:18:01
原創
3199 人瀏覽過

php閉包是什麼?有什麼用?下面這篇文章就來跟大家介紹一下php閉包。有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

php閉包有什麼用?

什麼是php閉包?

PHP閉包實作主要就是靠匿名函數

將匿名函數在普通函數中當數傳入,也可以被傳回.這就實現了—個簡單的閉包。

通俗的說:子函數可以使用父函數中的局部變量,這種行為就叫閉包!

閉包的兩個持點:

1、作為一個函數變數的一個引用-當函數返回時,其處於激活狀態. ?

2、一個閉包就是當一個函數返回時,一個沒有釋放資源的棧區.

其實上面兩點可以合成一點,就是閉包函數返回時,該函數內部變數處於激活狀態,函數所在棧區依然保留。

php閉包有什麼用?

實作php閉包既可以讀取函數內部的變量,同時還可以將變數始終保存在記憶體中,使得即使函數執行完畢,變數也將一直存在。

閉包的幾個作用:

1、減少foreach的循環的程式碼

例如手冊http://php.net/manual/en/functions.anonymous.php 中的範例Cart

products[$product] =$quantity;
    }
     
    publicfunction getQuantity($product)
    {
        returnisset($this->products[$product]) ?$this->products[$product] :
               FALSE;
    }
     
    publicfunction getTotal($tax)
    {
        $total= 0.00;
         
        $callback=
            function($quantity,$product) use ($tax, &$total)
            {
                $pricePerItem= constant(__CLASS__. "::PRICE_" .
                    strtoupper($product));
                $total+= ($pricePerItem* $quantity) * ($tax+ 1.0);
            };
         
        array_walk($this->products,$callback);
        returnround($total, 2);;
    }
}
 
$my_cart= new Cart;
 
// 往购物车里添加条目
$my_cart->add('butter', 1);
$my_cart->add('milk', 3);
$my_cart->add('eggs', 6);
 
// 打出出总价格,其中有 5% 的销售税.
print $my_cart->getTotal(0.05) . "\n";
// The result is 54.29
?>
登入後複製

這裡如果我們改造getTotal函數必然要使用到foreach 

#2、減少函數的參數

function html ($code , $id="",$class=""){
 
if ($id !== "") $id= " id = \"$id\"" ;
 
$class = ($class !== "")? " class =\"$class\"":">";
 
$open = "<$code$id$class";
 
$close = "";
 
return function ($inner= "")use ($open,$close){
 
return "$open$inner$close";};
 
}
登入後複製

如果是使用平時的方法,我們會把inner放到html函數參數中,這樣不管是程式碼閱讀還是使用都不如使用閉包

3、解除遞迴函數

登入後複製

注意上題中的use使用了&,這裡不使用&會出現錯誤n-1)是找不到function的(前面沒有定義fib的型別)

所以想使用閉包解除循環函數的時候就需要使用

登入後複製

這樣的形式

4、關於延遲綁定

如果你需要延遲綁定use裡面的變量,你就需要使用引用,否則在定義的時候就會做一份拷貝放到use中

登入後複製

使用引用和不使用引用就代表了是呼叫時賦值,還是函數宣告時賦值

更多PHP相關知識,請造訪PHP中文網

以上是php閉包有什麼用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!