【问题标题】:How to access an argument of the "parent" function?如何访问“父”函数的参数?
【发布时间】:2011-07-16 15:04:48
【问题描述】:

例如我有以下代码:

function a($param)
{
  function b()
  {
    echo $param;
  }
  b();
}
a("Hello World!");

这会引发 E_NOTICE 错误,因为 $param 当然是未定义的(在 b() 中)。

我不能将 $param 传递给 b(),因为 b() 应该是 preg_replace_callback() 的回调函数。 所以我有了将 $param 保存在 $GLOBALS 中的想法。

有没有更好的解决方案?

【问题讨论】:

  • 仅供参考,如果b 有权访问$param,则将其称为closure
  • @delnan:你使用哪个 PHP 版本?
  • @Felix Kling:没有,你为什么要问?闭包是一个与语言无关的概念。
  • @delnan:哦,对不起,我其实是想问 OP ;)
  • 操作?我在 XAMPP 上有 PHP 5.3.1。

标签: php functional-programming callback global-variables


【解决方案1】:

如果您使用的是 PHP 5.3,则可以使用 anonymous functionuse 关键字代替:

<?php
function a($param)
{
  $b = function() use ($param)
  {
    echo $param;
  };

  $b();
}
a("Hello World!");

【讨论】:

  • 我以前从未见过这个功能。 +1 在这里教我一些新东西。
【解决方案2】:

顺便说一句,因为它被标记为 functional-programming:在大多数函数式编程语言中,您只需引用 param,它就在范围内,没问题。这称为词法作用域,有时也称为块作用域。

通常是没有显式变量声明的语言(例如“分配给定义”)使其变得复杂和/或损坏。还有Java,它让你标记这些变量final

【讨论】:

    【解决方案3】:

    我建议在这里使用对象。

    Class a {
        private $param;
        private static $instance;
    
        public function __construct($param){
            $this->param = $param;
            self::$instance = $this;
        }
    
        public function getParam(){
            return $this->param;
        }
    
        public static function getInstance(){
            return self::$instance;
        }
    
    }
    
    function b(){
        echo a::getParam();
    }
    

    【讨论】:

      【解决方案4】:

      我建议每个函数单独使用,并从第一个函数传递参数调用第二个函数。

      它使您的代码更清晰,因为每个函数都执行一组操作。

      <?php
      function a($param)
      {
        b($param);
      }
      function b($param)
      {
          echo $param;
      }
      a("Hello World!");
      ?>
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 2020-06-17
      • 2017-06-12
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      相关资源
      最近更新 更多