【问题标题】:Closure behaving unexpectedly闭包行为异常
【发布时间】:2013-09-20 20:20:26
【问题描述】:

我在一个函数中有一个闭包,但是当它被调用时,返回值不是我期望的。

public function test($name, $content)
{
     $test = "\t<div id=\"{$name}\">{$content()}</div>\n";
     return $test;
}

而不是返回这个...

<div id="name">content</div>

它反而返回...

content
<div id="name"></div>

如果您知道如何解决此问题以正常显示,那么我将是一个非常高兴的人,在此先感谢。

【问题讨论】:

    标签: php function closures


    【解决方案1】:

    您没有显示$content() 函数,但从症状来看,我认为它打印 内容而不是返回它。发生的情况是 test() 函数调用 $content() 函数,该函数显示内容但不返回任何内容,然后 test() 返回并打印返回值。

    要修复它,只需让 $content() 返回内容而不是打印它。

    【讨论】:

      【解决方案2】:

      让闭包执行并捕获返回的内容。然后插入结果:

      public function test($name, $content)
      {
           $insert = $content();
           $test = "\t<div id=\"{$name}\">{$insert}</div>\n";
           return $test;
      }
      

      【讨论】:

      • 如果$content() 会返回要打印的内容,那么原始代码也可以正常工作。
      • 问题是我正在回显返回而不是将其返回给导致意外结果的函数,感谢您的帮助!
      • 剩下的唯一可能的问题是您传递的函数 $content 是回显而不是返回值。
      猜你喜欢
      • 2019-10-11
      • 2016-04-16
      • 2017-04-24
      • 2019-05-29
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多