国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP 閉包獲取外部變量和global關鍵字聲明變量的區別講解

2024-05-05 00:01:19
字體:
來源:轉載
供稿:網友

最近在學習workerman的時候比較頻繁的接觸到回調函數,使用中經常會因為worker的使用方式不同,會用這兩種不同的方式去調用外部的worker變量,這里就整理一下PHP閉包獲取外部變量和global關鍵字聲明變量的區別。

閉包

閉包是一個常見的概念,我們通常可以將其與回調函數配合使用,可以使代碼更加簡潔易讀。

閉包可以 通過拷貝的方式 讓函數使用父作用域中的變量。如:

$global = 'hello';$bbb = function()use($global){  echo $global."/n";};$bbb();//輸出 'hello'

global關鍵字聲明變量

通過global聲明變量同樣可以使函數體調用到函數外部的變量,不過global與use不同,globle關鍵字會使創建 一個與外部變量同名的引用 ,并且在函數內對變量作出修改同樣會作用域外部變量。

$global = 'hello';$fun = function(){  global $global;  $global =' world';  echo $global."/n";};$fun();// 輸出 'world'

這里只是創建一個同名引用而已,并不會改變原本外部變量$global的作用域,也就是說在另外一個函數中調用該依舊需要聲明或者使用閉包

$global = 'hello';$fun = function(){  global $global;  $global =' world';  echo 'a:'.$global."/n";};$ccc = function(){  echo 'b:'.$global;};$fun()$ccc()/*

輸出

a: worldNotice: Undefined variable: global in xxxxxxx on line xx*/

再稍微改一下代碼,這樣更容易對比閉包和global關鍵字聲明變量這兩種訪問外部變量方式的區別。

<?php$global = 'hello';$fun = function(){  global $global;  $global ='world';  echo 'a:'.$global."/n";};$bbb = function()use($global){  $global = 'china';  echo 'c:'.$global."/n";};$fun();echo 'b:'.$global."/n";$bbb();echo 'd:'.$global;

這里b和d兩個輸出可以看出來,global改變了外部變量的值,而閉包方式并沒有。

輸出:

a: worldb: worldc:chinad: world

最后再貼一個官方文檔中比較經典的使用匿名函數,閉包與回調函數配合的例子:

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;$my_cart->add('butter', 1);$my_cart->add('milk', 3);$my_cart->add('eggs', 6);print $my_cart->getTotal(0.05) . "/n";

總結

以上所述是小編給大家介紹的PHP 閉包獲取外部變量和global關鍵字聲明變量的區別講解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 卢氏县| 家居| 惠东县| 崇明县| 铜山县| 云浮市| 苍南县| 南投市| 长子县| 海口市| 湾仔区| 永清县| 交口县| 漠河县| 西昌市| 璧山县| 兴化市| 息烽县| 南和县| 永仁县| 安康市| 桑植县| 杭锦后旗| 长子县| 长子县| 孝义市| 永川市| 会理县| 密云县| 南京市| 中宁县| 漠河县| 分宜县| 广东省| 大英县| 安陆市| 琼结县| 广安市| 镇沅| 靖西县| 长泰县|