我是PHP的新手,我正在尝试使用amazon和ebay创建一个Web mashup。我的问题是我有一个名为“printCategoryItems()”的函数,它设置一个名为$ keyword的变量。我想在代码中的其他地方使用此变量,但我无法使其工作。 例如,
<?php
function printCategoryItems(){
if(isset($_GET['keyword'])){
$keyword = $_GET['keyword'];
...
}
}
...
$query = $keyword;
...
这是我想要做的事情,但我最终得到关键字的未定义变量错误。 我有办法做我想做的事吗?
提前感谢您的帮助。
(只有Java编程经验)
答案 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'];
...
}
}