我有一个函数,希望在完成后将其输出日志收集到电子邮件中。它看起来像这样:
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;
}
?>