【问题标题】:Return variable not working in PHP (i.e. no value returned!)返回变量在 PHP 中不起作用(即没有返回值!)
【发布时间】:2016-11-27 16:38:41
【问题描述】:

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

在 PHP 中,我试图将一个值从函数“返回”到主程序环境(用于后续计算),但无论我尝试什么,在我的函数中计算的值都不会返回值(但是从函数回显效果很好)。

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

谁能告诉我如何解决这个问题?在过去的两天里,我一直在搜索谷歌和网站 ike 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>';
    }

}

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

// CALL FUNCTION
Calculation_IsArray($ArrayOfValues);

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

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


这个 VAR 是一个数组
返回数组 =

价值 $Var_IsArray =

阵列键元素数 = 2
数组键元素是数字
键 = 0,值 = 数组
阵列键元素数 = 2
数组键元素是数字
KEY = 1,VALUE = 数组

我在 stackoverflow 上进行了搜索,发现了类似问题的报告(我什至尝试测试这些解决方案的建议,例如在我的函数中的不同位置放置 return 以测试它会在哪里工作),但没有任何工作,并且根据我所读到的,如果明确告诉 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);

这里是以 HTML 格式输出到浏览器选项卡/窗口/终端:


这个 VAR 是一个数组
下面是返回值和 VAR_DUMP:

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

我已经尝试了所有可能的编码方式,包括:

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

为什么 PHP 没有将我的值/变量返回给主程序?

【问题讨论】:

  • 为什么不在 else 块中返回 false?
  • 如果您可以发布实际尝试使用返回值的代码会有所帮助。
  • 谢谢,朋友们!在我发布原始帖子后,我回去做了一些测试,并使用简化代码更新了此处的帖子,实际上尝试使用此处的返回值让你们复制和粘贴问题的完整隔离代码。我尝试过使用 return false,但默认情况下 PHP(我读过)返回 false/NULL。
  • 你如何将$Var_IsArray 转储到它的功能范围之外?

标签: php return return-value


【解决方案1】:

好的,所以当 Peter Bloomfield 响应并写下他的正确答案时,我正在破解自己并尝试不同的事情,并记住我在 Python 中所做的也是使变量等于函数调用!我试过了,现在我用那个函数做的任何事情都可以正常返回,感谢上帝!!

这里是主程序中的更新代码,现在接收到了返回值(它不再只返回 NULL):

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

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

【讨论】:

    【解决方案2】:

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

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

    例如:

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

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

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

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

    【讨论】:

    • 是的,我想我自己想通了(并测试了几次 - 它现在返回变量,感谢上帝!!)当你写这篇文章时,我记得这是我在 Python 中做:我做了一个等于函数调用的变量!是的,你是对的兄弟!这就是解决方案!我将在原始帖子的编辑中发布我的答案,以便你们可以看到代码解决方案 - 感谢上帝,我们的创造者,他是知识的恩典者!霍南哈达特!!
    【解决方案3】:
    <?php 
    // DECLARE FUNCTIONS
    
    // FUNCTION
    function Calculation_IsArray ($ArrayAny){
        if (is_array($ArrayAny)) {
            echo '<div>THIS VAR IS AN ARRAY</div>';
            //$Var_IsArray = TRUE;
            return true;
        } else {
            echo '<div>THIS VAR IS **NOT** AN ARRAY</div>';
        }   
    }
    
    // BEGIN MAIN PROGRAM
    $x = array(1, 2, 3, 4, 5, 6, 7);
    $status = Calculation_IsArray($x);
    
    if($status == true){
        // COME BACK TO HERE AFTER THE FUNCTION RETURNS CALCULATED VALUE
        echo '<div>HERE IS THE RETURNED VALUE AND VAR_DUMP BELOW:<br />' . print_r($x) . '</div>';
        var_dump($x);
    }
    

    【讨论】:

    • 问题是我需要在这个函数中做一些额外的计算,并将值返回给主程序供以后处理。仅仅返回 true 它是一个数组是不够的。我检查它是否是数组类型,然后做一些额外的计算。需要返回这些计算值。我正在测试只返回一个变量是否简单。所以如果我不能返回简单的单个变量,我就不能返回更复杂的数组。因此,我需要先解决这个退货问题,然后才能继续前进。在 Python 中,这甚至都不是问题......
    • 您可以在函数 Calculation_IsArray(); 中对数组执行所有操作;你想要什么,并且可以在函数中返回这些东西以返回 true。
    • 您的代码对我产生了以下语法错误:Parse error: syntax error, unexpected $end in /public_html/testreturn.php on line 91
    • 我不想返回 true。我想检查 IF 数组类型,然后我想进行计算,然后从这些计算中返回一个新数组。问题是您可以看到没有任何东西返回。您是否尝试过运行我上面的代码(简化的独立版本)以查看您在计算机上得到的结果?尽管调用了特定的 RETURN 并返回了特定的变量,您是否还会返回 NULL?
    • 您的代码中的语法错误可能意味着您忘记用结尾 } 关闭 {} 对或忘记用分号关闭语句; ; - 至少这是我在 stackflow 上阅读并看到的内容。
    【解决方案4】:

    希望这会有所帮助:

    // FUNCTION
    function Calculation_IsArray ($ArrayAny){
        if (is_array($ArrayAny)) {
          echo '<div>THIS VAR IS AN ARRAY</div>';           
          return true;
        } else {
          echo '<div>THIS VAR IS **NOT** AN ARRAY</div>';
          return false;
        }
    }
    
    $array = array(1, 1, 1);
    if ( Calculation_IsArray($array) ){
        print_r( $array );
    }    
    

    【讨论】:

    • 不,它不能解决问题,因为我的程序已经成功地回显了 HTML。我需要它来返回计算出的值/变量,并能够从主程序中访问它们(主程序按顺序执行程序的所有功能,并且只根据需要调用我的代码)。
    【解决方案5】:

    您可以将函数简化为以下内容,因此它总是返回一些东西(真,假)

    function Calculation_IsArray( $ArrayAny ){
        echo is_array($ArrayAny) ? '<div>THIS VAR IS AN ARRAY</div>' : '<div>THIS VAR IS **NOT** AN ARRAY</div>';
        return is_array($ArrayAny);
    }
    

    【讨论】:

    • 如果是数组我不需要返回。我检查它是否是一个数组,如果是,那么我需要计算一些值并将它们作为数组返回给主程序,以便在其他函数中进一步计算,每个函数都有特定的用途。
    猜你喜欢
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    相关资源
    最近更新 更多