我是PHP的新手,我正在尝试用amazon和ebay创建一个web混搭。我的问题是,我有一个名为"printCategoryItems()“的函数,它设置一个名为$keyword的变量。我想在代码的其他地方使用这个变量,但是我无法让它工作。例如,
<?php
function printCategoryItems(){
if(isset($_GET['keyword'])){
$keyword = $_GET['keyword'];
...
}
}
...
$query = $keyword;
...
这是我想要做的事情,但我最终得到了一个未定义的关键字变量错误。我有办法做我想做的事吗?
谢谢你提前帮忙。
(仅具有Java编程经验)
发布于 2010-02-19 12:22:15
您可以在函数中使用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);
作为半方面的注意:另一个仍然使用全局变量的解决方案(同样不是一个好主意)是使用超全局阵列:
function printCategoryItems() {
if(isset($_GET['keyword'])){
$GLOBALS['keywords'] = $_GET['keyword'];
}
}
printCategoryItems();
var_dump($GLOBALS['keywords']);
在这里,不再需要global
关键字了。
最后,您应该阅读PHP文档--特别是函数部分。
发布于 2010-02-19 12:21:03
从函数返回变量
return $keyword;
并在调用该函数时分配它。
$query = printCategoryItems();
此外,您可以将$query
声明为空字符串,并通过引用将其传递给函数,例如printCategoryItems(&$query)
。或者,您可以将代码包装到类中,并使$query
成为实例变量,这样就可以使用$this->query = $keyword
设置它。
但是,从一个名为printCategoryItems()
的函数中,我不希望它设置某些内容,而是在屏幕上打印一些内容。您可能需要考虑函数的责任。
发布于 2010-02-19 13:05:45
完全同意反对global
。无论什么时候你都可以避免global
,只要避免它。不要思考,但要避免。在PHP中,我想不出任何场景,在这种情况下,您无法避免global
。
https://stackoverflow.com/questions/2296156
复制相似问题