正在将内部函数中的字符串追加到父变量中


Appending string from inner function to parent variable

我有一个函数,希望在完成后将其输出日志收集到电子邮件中。它看起来像这样:

function blabla() {
   $emailMessage = "some text";
   $emailMessage .= "some more text";
   function foo() {
     for ($x = 1; $x <= 20; $x++) {
        $emailMessage .= 'Call #' . $x;
        // then doing an API call
        return $response; 
     }
   }
   $res = foo();
   $emailMessage .= "last line of text";
}

现在$emailMessage看起来是这样的:some text || some more text || last line of text。内部函数中的文本没有附加。

如何使其看起来像这样:some text || some more text || call #1 || call #2 ||... || last line of text

------编辑------

多亏了@camal-pal,我使用了一个全局变量。结果如下:

function blabla() {
       global $emailMessage;
       $emailMessage = "some text";
       $emailMessage .= "some more text";
       function foo() {
         global $emailMessage;
         for ($x = 1; $x <= 20; $x++) {
            $emailMessage .= 'Call #' . $x;
            // then doing an API call
            return $response; 
         }
       }
       $res = foo();
       $emailMessage .= "last line of text";
    }

这是由于作用域,子函数有自己的作用域。

我可以想出两种方法来完成这项任务:

  • 使用全局变量
  • 作为Ref参数传递(请参阅下面的示例)

function blabla() {
    $emailMessage = "some text".PHP_EOL;
    $emailMessage .= "some more text".PHP_EOL;
    function foo(&$emailMessage) { // passed as ref argument
     for ($x = 1; $x <= 20; $x++) {
            $emailMessage .= 'Call #' . $x.PHP_EOL;
            // then doing an API call
            //return $response; //it will exit function
     }
    }
    $res = foo($emailMessage);
    $emailMessage .= "last line of text".PHP_EOL;
    return $emailMessage;
}
echo blabla();

演示:https://eval.in/571036

您使用完全不同的变量名吗?

$emailResult .= 'Call #' . $x;

应替换为:

$emailMessage .= 'Call #' . $x;

更清楚的是一个合适的(外部)函数

function blabla() {
     $emailMessage = "some text";
     $emailMessage .= "some more text";
     $emailMessage = foo( $emailMessage);
     $emailMessage .= "last line of text";
}

function foo($emailMessage) {
  for ($x = 1; $x <= 20; $x++) {
      $emailResult .= 'Call #' . $x;
      // then doing an API call
      return $emailResult; 
  }
}

遵循示例。我希望这对你有帮助。

<?php
echo blabla();

function blabla(){
$emailMessage = "some text|";
$emailMessage .= "some more text|";
function foo() {
$emailResult="";   
 for ($x = 1; $x <= 20; $x++) {
    $emailResult .= "Call #".$x."|";
 }
    return $emailResult; 
 }
 $res = foo();
 $emailMessage .=$res; 
 $emailMessage .= "last line of text";
 return $emailMessage;
 }
 ?>