[英]Proper use of global vars in PHP - Adding to an array from a Function
上下文:处理xml数据的两个函数需要组合到单个数组中。
我正在从多个提要中进行处理,并将其组合到一个多级关联数组中,如下所示:
$processedData:
Array (
[item1] => Array (
[somedata] => tasty
[moredata] => food
[evenmore] => like pizza
)
[item2] => Array (
[somedata] => less tasty
[moredata] => food
[evenmore] => like bread pudding
)
每个函数都在单独的数据上运行,每个函数都提供了我需要的一些数据; 例如, somedata
和moredata
来自function one
,而evenmore
来自function two
。
function one ($xml) {
$myPrice = new XMLReader(); //some happy XMLReader stuff that works
$myPrice->xml($xml);
$key = '';
while ($myPrice->read()) {
if ($myPrice->nodeType == XMLReader::ELEMENT) { //only opening tags.
$tag = $myPrice->name;
switch ($tag) {
case 'TheKey':
$key = $myPrice->readInnerXML();
break;
case 'HowGood':
$processedData[$key]['somedata'] = $myPrice->readInnerXML();
break;
case 'TypeOfThing':
$processedData[$key]['moredata'] = $myPrice->readInnerXML();
break;
}
}
}
}
Function two
在结构上相似,但是处理的数据不同。 理想情况下,两个函数都应将其数据返回到一个数组中。 这可以通过在每个函数顶部附近声明global $processedData
轻松实现。 根据php手册 ,将返回值与array_merge
和+
将覆盖具有相同键的值。
注意:与大多数其他有关全局变量的问题不同,问题不是输入值,而是输出值。
问题PHP中的全局变量是否被视为不良做法? 如果是这样,为什么? 建议明确标记全局变量以解决与全局变量有关的常见问题,但是几乎所有关于堆栈溢出的答案都是:PHP中的Global Vars表示“您可以这样做,但您可能不应该这样做。”
是将多个函数的返回值结合起来,可以很好地利用php全局变量吗? 有办法避免全局变量吗?
或者,或者,什么情况下可以很好地使用php globals? 什么时候可以使用全局变量?
您可以使用引用将变量作为第二个参数传递。
function one($xml, &$processedData){}
function two($xml, &$processedData){}
它可以帮助您避免使用全局。
http://php.net/manual/en/functions.arguments.php#functions.arguments.by-reference
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.