PHP函数返回值消失(?)

时间:2018-07-20 02:02:42

标签: php function return-value

在以下函数调用中,日志文件向我显示了 即使在返回调用之前变量具有值,接收返回值的变量为空

如果不包含则为空,因为我不相信发生了什么。

我想念什么?有空吗?

    ...
    ...
    $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
    }

2 个答案:

答案 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, ...);
}