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

时间:2010-02-19 12:17:09

标签: php amazon mashup

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


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

$query = $keyword;

...

这是我想要做的事情,但我最终得到关键字的未定义变量错误。 我有办法做我想做的事吗?

提前感谢您的帮助。

(只有Java编程经验)

4 个答案:

答案 0 :(得分:6)

您可以在函数中使用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

答案 1 :(得分:2)

从函数

返回变量
return $keyword;

并在调用函数时指定它

$query = printCategoryItems();

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

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

答案 2 :(得分:1)

完全同意global的反对意见。无论你在哪里可以避免global,都要避免它。不要想,但要避免。在PHP中,我无法想到任何情况,你无法避免global

答案 3 :(得分:-1)

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

function printCategoryItems(){
    if(isset($_GET['keyword'])){

        global $keyword = $_GET['keyword'];
        ...
    }
}