【问题标题】:Can I use PHP anonymous function as an argument, without assigning the function to a variable?我可以使用 PHP 匿名函数作为参数,而不将函数分配给变量吗?
【发布时间】:2017-12-19 18:22:47
【问题描述】:

PHP 是否允许在连接过程中使用匿名函数作为参数之一?

如果是这样,正确的语法是什么?

例如,这是我想要开始工作的示例:

$final_text = $some_initial_string . function ($array_of_strings)
{
    $out = '';
    foreach ($array_of_strings as $this_particular_string)
    {
        $out .= $this_particular_string;
    }
    return $out;
};

【问题讨论】:

  • 你期望得到什么?一个字符串?一个函数?一个“字符串函数”?
  • 试过 implode()?
  • 对否决票的解释会很棒。 . .无论如何,我希望匿名函数返回一个字符串,然后将其连接到其他字符串。
  • Downvote 可能是因为您不是询问问题而是感知解决方案,而没有尝试此代码来断言它是否有效。这被称为 XY 问题。此外,其他 cmets 强调您正在使用 implode 函数。
  • 从 php7 开始,您可以这样做:'text ' . (function () {return '';})()

标签: php anonymous-function php-5.6 php-7.1


【解决方案1】:

注意:以下内容预计适用于 PHP 7.x,但不适用于 PHP 5.6(对于 5.6,首先将匿名函数分配给变量)

/*
 * Strings before & after
 */
$table_heading_text = "HEADING";
$table_bottom_text = "BOTTOM";

/*
 * Use the function this way
 */
echo $table_heading_text . (function (array $array_of_strings)
{
    $out = '';
    foreach ($array_of_strings as $this_particular_string)
    {
        $out .= $this_particular_string;
    }
    return $out;
})(array(
    "hi",
    "mom"
)) . $table_bottom_text;

总之……

  1. 函数必须返回一些可以转换为文本的值
  2. 函数定义必须用括号括起来( ... )
  3. 不要忘记在函数定义之后有调用参数

例子:

echo "BEFORE" . (function ($x){return $x;})(" - MIDDLE - ") . "AFTER";
echo "BEFORE" . (function (){return " - MIDDLE - ";})() . "AFTER";

此外,使用implode() 可能更适合此特定任务。

【讨论】:

  • 不完全。类似$table_string = $table_heading_text . function ($table_row_data) { $out = ''; foreach($table_row_data as $row_data) { $out .= '<tr><td>'. $row_data->field .'</td><tr>'; } return $out; } . $table_bottom_text;
  • 我不确定table_string 或字符串分配如何适合您现有的问题...
  • 这完全忽略了问题的重点:“PHP 在连接期间是否允许匿名函数?” ...简单的答案是否定的。
  • 您使用的是什么版本的 PHP?我似乎能够在 PHP 7.1.6 上运行它
  • @Dennis -- 只是想跟进并让您知道我现在正在运行 7.0 并且一切都像魅力一样工作。再次感谢您的坚持!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-13
  • 1970-01-01
  • 2011-01-25
  • 2015-02-06
  • 2014-04-03
  • 2021-11-15
相关资源
最近更新 更多