真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PHP閉包function()use()中的使用方法

這篇文章主要介紹了PHP閉包function() use()中的使用方法,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

成都創(chuàng)新互聯(lián)公司10多年企業(yè)網(wǎng)站制作服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及高端網(wǎng)站定制服務(wù),企業(yè)網(wǎng)站制作及推廣,對(duì)玻璃貼膜等多個(gè)方面擁有多年的網(wǎng)站維護(hù)經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。

php的閉包(Closure)也就是匿名函數(shù)。是PHP5.3引入的。

閉包的語法很簡單,需要注意的關(guān)鍵字就只有use,use意思是連接閉包和外界變量。

1

2

3

[php] view plain copy

$a =function()use($b) {  

}

閉包的幾個(gè)作用:

1 減少foreach的循環(huán)的代碼

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

[php] view plain copy

// 一個(gè)基本的購物車,包括一些已經(jīng)添加的商品和每種商品的數(shù)量。  

// 其中有一個(gè)方法用來計(jì)算購物車中所有商品的總價(jià)格。該方法使用了一個(gè)closure作為回調(diào)函數(shù)。  

class Cart  

{  

   const PRICE_BUTTER  = 1.00;  

   const PRICE_MILK    = 3.00;  

   const PRICE_EGGS    = 6.95;  

   protected   $products =array();  

   public function add($product,$quantity)  

   {  

       $this->products[$product] = $quantity;  

   }  

   public function getQuantity($product)  

   {  

       return isset($this->products[$product]) ? $this->products[$product] :  

              FALSE;  

   }  

   public function 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);  

       return round($total, 2);;  

   }  

}  

$my_cart =new Cart;  

// 往購物車?yán)锾砑訔l目  

$my_cart->add('butter', 1);  

$my_cart->add('milk', 3);  

$my_cart->add('eggs', 6);  

// 打出出總價(jià)格,其中有 5% 的銷售稅.  

print $my_cart->getTotal(0.05) . "\n";  

// The result is 54.29  

?>

這里如果我們改造getTotal函數(shù)必然要使用到foreach

2 減少函數(shù)的參數(shù)

1

2

3

4

5

6

7

8

9

[php] view plain copy

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";};  

}

如果是使用平時(shí)的方法,我們會(huì)把inner放到html函數(shù)參數(shù)中,這樣不管是代碼閱讀還是使用都不如使用閉包

3 解除遞歸函數(shù)

1

2

3

4

5

6

7

8

9

10

[php] view plain copy

   $fib =function($n)use(&$fib) {  

       if($n == 0 || $n == 1) return 1;  

       return $fib($n - 1) + $fib($n - 2);  

   };  

  echo $fib(2) . "\n";// 2  

  $lie =$fib;  

  $fib =function(){die('error');};//rewrite $fib variable  

  echo $lie(5);// error   because $fib is referenced by closure

注意上題中的use使用了&,這里不使用&會(huì)出現(xiàn)錯(cuò)誤n-1)是找不到function的(前面沒有定義fib的類型)

所以想使用閉包解除循環(huán)函數(shù)的時(shí)候就需要使用

1

2

3

4

5

[php] view plain copy

$recursive =function ()use (&$recursive){  

// The function is now available as $recursive  

}

這樣的形式

4 關(guān)于延遲綁定

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

1

2

3

4

5

6

7

8

9

10

11

12

13

[php] view plain copy

$result = 0;  

$one =function()  

{ var_dump($result); };  

$two =function()use ($result)  

{ var_dump($result); };  

$three =function()use (&$result)  

{ var_dump($result); };  

$result++;  

$one();   // outputs NULL: $result is not in scope  

$two();   // outputs int(0): $result was copied  

$three();   // outputs int(1)

使用引用和不使用引用就代表了是調(diào)用時(shí)賦值,還是申明時(shí)候賦值

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享PHP閉包function() use()中的使用方法內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來學(xué)習(xí)!


文章名稱:PHP閉包function()use()中的使用方法
本文網(wǎng)址:http://weahome.cn/article/poidpd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部