2016-05-13 65 views
0

我有一个函数,并希望在完成时收集它的输出日志到电子邮件。它看起来是这样的:从内部函数追加字符串到父变量

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

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

感谢@kamal朋友我用一个全局变量。结果如下所示:

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"; 

    } 
+0

为什么要使用“内部函数”? – zoubida13

回答

1

这是由于范围,儿童函数有它自己的范围:

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

应替换。

我能想到的两个选项完成此任务:

  • 使用全局变量
  • 传递为参考参数(见下面的例子)

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

+0

啊OK谢谢。所以我去了一个全球变种。我习惯于JavaScript范围 - 这就是为什么我认为全球不会是必要的;-) – Seb

0

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

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

对不起,只是在这个例子!我编辑它... – Seb

0

更清晰的正确的(外部)函数

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; 
    } 
} 
0

请按照示例进行操作。我希望这能帮到您。

<?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; 

} 
?>