在以下函数调用中,日志文件向我显示了 即使在返回调用之前变量具有值,接收返回值的变量为空
如果不包含则为空,因为我不相信发生了什么。
我想念什么?有空吗?
...
...
$workingProductArray=$this->placeNextItem($workingProductArray, ... );
if (empty($workingProductArray)){
write_log ("DYING array empty");
die(); //<-- and indeed the system dies.
}
}
private function placeNextItem(array $workingProductArray, ... )
{
if ($this->areAllProductsIgnored($workingProductArray)){
print_r($workingProductArray); // <-- SHOWS EXPECTED ARRAY AND VALUES
return $workingProductArray; // returning this value
}
答案 0 :(得分:1)
很奇怪!如果仍然无法正常运行,请尝试不要从placeNextItem函数中print_r2
尝试将$workingProductArray
命名为placeNextItem的其他名称。
答案 1 :(得分:0)
我只是在研究代码。我只是注意到我犯了一个可怕的思维错误... (您在提到的代码上看不到...这里是函数末尾的代码)
...
...
$workingProductArray=$this->placeNextItem($workingProductArray, ... );
if (empty($workingProductArray)){
write_log ("DYING array empty");
die(); //<-- and indeed the system dies.
}
}
private function placeNextItem(array $workingProductArray, ... ){
if ($this->areAllProductsIgnored($workingProductArray)){
print_r($workingProductArray); // <-- SHOWS EXPECTED ARRAY AND VALUES
return $workingProductArray; // returning this value
}
...
$this->placeNextItem(array $workingProductArray, ...);
}
所以我也从内部(递归地)调用了此函数,我以为return语句会转到上面的方法,但是相反(它顺其自然!)又回到了递归调用者,这与我使用的方法相同也必须返回值...
轻松修复:
private function placeNextItem(array $workingProductArray, ... ){
if ($this->areAllProductsIgnored($workingProductArray)){
print_r($workingProductArray); // <-- SHOWS EXPECTED ARRAY AND VALUES
return $workingProductArray; // returning this value
}
...
return $this->placeNextItem(array $workingProductArray, ...);
}