3

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


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

$query = $keyword;

...

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

提前感谢您的帮助。

(只有Java编程经验)

4

4 回答 4

8

您可以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超全局数组

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

printCategoryItems();
var_dump($GLOBALS['keywords']);

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


最后,您应该阅读 PHP 文档——尤其是关于 Functions 的部分

于 2010-02-19T12:22:15.967 回答
2

从函数中返回变量

return $keyword;

并在调用函数时分配它

$query = printCategoryItems();

此外,您可以声明$query为空字符串并通过引用将其传递给函数,例如printCategoryItems(&$query). 或者您可以将代码包装到一个类中并创建$query一个实例变量,这样您就可以使用$this->query = $keyword.

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

于 2010-02-19T12:21:03.863 回答
1

完全同意反对意见global。能避开global的地方,就避开它。不要想,但要避免。而在 PHP 中,我想不出任何你无法避免的场景global

于 2010-02-19T13:05:45.177 回答
-1

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

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

        global $keyword = $_GET['keyword'];
        ...
    }
}
于 2010-02-19T12:21:14.397 回答