如何从另一个函数中获取变量
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(&$query)
。或者您可以将您的代码包装到一个类中并将$query
设为实例变量,这样您就可以使用$this->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。这是两个独立的变量。以上是关于如何从另一个函数中获取变量的主要内容,如果未能解决你的问题,请参考以下文章