返回变量在 PHP 中不起作用(即没有返回值!)

Jer*_*mer 0 php return return-value

我更喜欢使用 Python 语言进行编程,但必须使用 PHP 来处理特定的网站应用程序项目。

在 PHP 中,我试图将函数中的值“返回”到主程序环境(用于后续计算),但无论我尝试什么,函数中计算的值都不会返回该值(而是从函数中回显)工作正常)。

在Python中,我从来没有遇到过返回变量的问题:即从函数返回的所有值对于主程序和/或调用产生返回值的函数的其他函数都是可用的和可访问的。

有人可以告诉我如何解决这个问题吗?过去两天我一直在谷歌和 stackoverflow 等网站上搜索,但没有成功。我有很多 O'Reilly 计算机书籍,其中包括许多有关 PHP 的书籍,我在这些书籍中交叉引用了我的研究,并阅读了有关 RETURN 函数的所有内容 - 看来我所做的一切都是正确的,甚至专门声明了要返回的值。至关重要的是,我能够返回值并有权访问这些值,以便继续进行该项目的开发 - 否则,如果我无法返回值进行进一步处理,我就会陷入困境!

这是相关的代码片段:

// DECLARE FUNCTIONS

// FUNCTION
function Calculation_IsArray ($ArrayAny){
    if (is_array($ArrayAny)) {
        echo '<div>THIS VAR IS AN ARRAY</div>';
        $Var_IsArray = TRUE;
        return $Var_IsArray;
    } else {
        echo '<div>THIS VAR IS **NOT** AN ARRAY</div>';
    }

}
Run Code Online (Sandbox Code Playgroud)

声明函数并进行一些初始计算以获取数组进行检查后,我按如下方式调用上述函数:

// CALL FUNCTION
Calculation_IsArray($ArrayOfValues);
Run Code Online (Sandbox Code Playgroud)

我期望程序调用函数 Calculation_IsArray() 并向其传递要检查的数组 ($ArrayOfValues)。从下面的输出中可以看到,数组已通过并检查并确认为数组类型,并且 FOREACH 循环以及 IF/ELSE 条件都工作正常并回显正确的输出。但是,上面的代码不会返回任何值,因为当我检查“返回”后可从主程序访问的返回值(即已检查的数组)时,您可以看到回显的 NULL 值。

以下是浏览器屏幕上回显的结果(输出):


此 VAR 是一个数组
返回的数组 = $Var_IsArray 的
NULL 值= 数组键元素的 NULL 计数 = 2 个数组键元素为数字 键 = 0,值 = 数组键元素的数组计数 = 2 个 数组键元素为数字 键 = 1,值 = 数组







我在 stackoverflow 上进行了搜索,发现了类似问题的报告(我什至尝试测试这些解决方案的建议,例如将 return 放在我的函数中的各个位置以测试它的工作位置),但没有任何效果,并且这种失败根据我所读到的内容,如果显式告知 PHP 返回值,则返回值不符合逻辑。

非常感谢您在此事上的任何帮助!

[提交上述原始问题后]:

我现在尝试通过创建一个名为 TestReturn.php 的测试脚本来隔离我的问题。

在该脚本中,我放置了以下代码,但仍然没有返回值!

// DECLARE FUNCTIONS

        // FUNCTION
        function Calculation_IsArray ($ArrayAny){
            if (is_array($ArrayAny)) {
                echo '<div>THIS VAR IS AN ARRAY</div>';
                $Var_IsArray = TRUE;
                return $Var_IsArray;
            } else {
                echo '<div>THIS VAR IS **NOT** AN ARRAY</div>';
            }   
        }

        // BEGIN MAIN PROGRAM
        $x = array(1, 2, 3, 4, 5, 6, 7);
        Calculation_IsArray($x);

        // COME BACK TO HERE AFTER THE FUNCTION RETURNS CALCULATED VALUE
        echo '<div>HERE IS THE RETURNED VALUE AND VAR_DUMP BELOW:' . $Var_IsArray . '</div>';
        var_dump($Var_IsArray);
Run Code Online (Sandbox Code Playgroud)

以下是浏览器选项卡/窗口/终端的 HTML 输出:


这个 VAR 是一个数组,
这里是返回值和下面的 VAR_DUMP:
NULL

“队长,这不会计算!”,即这对我来说没有意义,为什么 PHP 没有返回我特意告诉它返回主程序的值!

我尝试了所有编码的可能性,包括:

 return $variable;
 return ($variable);
 return() ;  // i.e. I read somewhere that PHP by default returns the last calculated value in a function.
 return ;
Run Code Online (Sandbox Code Playgroud)

为什么 PHP 不将我的值/变量返回到主程序?

Pet*_*eld 5

当您从函数返回某些内容时,它不会使变量本身在调用范围(即函数外部)中可用。换句话说,$Var_IsArray只存在于函数内部。

仅返回变量的内容,并且必须在调用函数的地方立即使用结果;例如,存储它以供将来参考、将其传递给另一个函数或在某种条件下测试它。

例如:

function foo()
{
    $vals = ['red', 'green', 'blue'];
    return $vals;
}

$somedata = foo();
Run Code Online (Sandbox Code Playgroud)

在此示例中,$somedata最终将保存先前存储在 中的数组$vals

这是大多数编程语言中返回语句(或等效功能)的标准行为。还有其他方法可以从函数中获取变量,例如使用全局变量。一般来说,它们并不是一个好的做法。

我以前也使用过Python,我不认为它有什么不同(除非我错过了一个主要的语言功能)。您可能需要仔细检查您的 Python 代码是否正在执行您认为它正在执行的操作,否则您将来可能会遇到一些令人讨厌的错误。