• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP 闭包获取外部变量和global关键字声明变量的区别讲解

    最近在学习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: world
    Notice: 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: world
    b: world
    c:china
    d: 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关键字声明变量的区别讲解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    您可能感兴趣的文章:
    • PHP实现执行外部程序的方法详解
    • PHP实现函数内修改外部变量值的方法示例
    • php外部执行命令函数用法小结
    • PHP中如何防止外部恶意提交调用ajax接口
    • PHP用反撇号执行外部命令
    • php绘图之加载外部图片的方法
    • yiic命令时提示“php.exe”不是内部或外部命令的解决方法
    • PHP实现删除非站内外部链接实例代码
    • php判断正常访问和外部访问的示例
    • PHP 执行系统外部命令 system() exec() passthru()
    • PHP调用外部程序的方法解析
    上一篇:Laravel中数据迁移与数据填充的详细步骤
    下一篇:用好anyproxy提高公众号文章采集效率
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    PHP 闭包获取外部变量和global关键字声明变量的区别讲解 PHP,闭包,获取,外部,变量,