如何从另一个函数中获取变量

Posted

技术标签:

【中文标题】如何从另一个函数中获取变量【英文标题】: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编程经验)

【问题讨论】:

【参考方案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。这是两个独立的变量。

以上是关于如何从另一个函数中获取变量的主要内容,如果未能解决你的问题,请参考以下文章

jquery从另一个函数获取变量

如何从另一个if条件中的一个if条件中获取变量的值?

从另一个 python 文件中获取变量。无属性错误

如何从另一个类中获取字符串变量

如何从另一个网页获取值并将其存储为变量?

在 Kivy 中,我如何从另一个以 kv 语言显示的另一个屏幕获取变量