【问题标题】:How to get a variable from another function如何从另一个函数中获取变量
【发布时间】:2011-01-18 18:20:03
【问题描述】:

我是 PHP 新手,我正在尝试使用 amazon 和 ebay 创建一个 web mashup。我的问题是我有一个名为“printCategoryItems()”的函数,它设置了一个名为 $keyword 的变量。我想在代码的其他地方使用这个变量,但我无法让它工作。 例如,


<?php
function printCategoryItems(){
    if(isset($_GET['keyword'])){
        $keyword = $_GET['keyword'];
        ...
    }
}
...

$query = $keyword;

...

这是我正在尝试做的事情,但我最终得到一个未定义的关键字变量错误。 有没有办法让我做我想做的事?

提前感谢您的帮助。

(只有Java编程经验)

【问题讨论】:

    标签: php amazon mashup


    【解决方案1】:

    你可以在函数中使用global关键字,所以函数内的$keywords指的是函数外的$keywords

    function printCategoryItems() {
        global $keyword;
        if(isset($_GET['keyword'])){
            $keyword = $_GET['keyword'];
        }
    }
    
    printCategoryItems();
    var_dump($keyword);
    

    这是因为函数内部的变量属于函数的局部作用域,而不是全局作用域(我很久没做过JAVA了,但是我觉得在JAVA中也是一样的:在函数内部声明的变量在函数外部不可见).


    但是使用全局变量通常不是一个好主意...更好的解决方案是让您的函数 return 数据;例如:

    function printCategoryItems() {
        if(isset($_GET['keyword'])){
            return $_GET['keyword'];
        }
    }
    
    $keyword = printCategoryItems();
    var_dump($keyword);
    


    作为一个半边注:另一个解决方案,仍然使用全局变量(再次不是一个好主意)将使用$GLOBALS superglobal array

    function printCategoryItems() {
        if(isset($_GET['keyword'])){
            $GLOBALS['keywords'] = $_GET['keyword'];
        }
    }
    
    printCategoryItems();
    var_dump($GLOBALS['keywords']);
    

    在这里,不再需要 global 关键字了。


    最后,您应该阅读 PHP 文档——尤其是 the part about Functions

    【讨论】:

      【解决方案2】:

      从函数中返回变量

      return $keyword;
      

      并在调用函数时分配它

      $query = printCategoryItems();
      

      此外,您可以将$query 声明为空字符串并通过引用将其传递给函数,例如printCategoryItems(&amp;$query)。或者您可以将您的代码包装到一个类中并将$query 设为实例变量,这样您就可以使用$this-&gt;query = $keyword 对其进行设置。

      但是,从一个名为printCategoryItems() 的函数中,我不希望它设置一些东西,而是在屏幕上打印一些东西。您可能需要考虑函数的责任。

      【讨论】:

      • 这将是解决此类问题的最佳方法
      【解决方案3】:

      完全同意global的反对意见。无论您在哪里可以避免global,只要避免它。不要想,但要避免。而在 PHP 中,我想不出任何你无法避免 global 的场景。

      【讨论】:

        【解决方案4】:

        如果您想访问在其他地方定义的变量,但又想在函数内部和外部访问它,请在其前面加上global 关键字:

        function printCategoryItems(){
            if(isset($_GET['keyword'])){
        
                global $keyword = $_GET['keyword'];
                ...
            }
        }
        

        【讨论】:

        • PHP 不是 Javascript,所以方法 1 不起作用。并且使用global 被认为是不好的做法。
        • @Gordon:这是什么意思?
        • 在 Javascript 中,您可以在函数范围之外定义一个变量,当在内部调用时,它会冒泡,但在 PHP 中并非如此,因此在您的第一个示例中,函数内部的 $keyword 将不要在函数外引用 $keyword。这是两个独立的变量。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多