【发布时间】:2014-10-15 00:47:55
【问题描述】:
上下文:两个函数处理需要组合成一个数组的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 manual,将返回值与array_merge 和+ 组合将覆盖具有相同键的值。
注意:与大多数其他关于全局变量的问题不同,问题不是输入值,而是输出值。
问题Are global variables in PHP considered bad practice? If so, why? 建议清楚地标记全局变量以解决全局变量的常见问题,但几乎所有关于堆栈溢出的答案:PHP 中的全局变量都说 “你可以这样做,但你可能应该这样做't。”
我的问题
组合来自多个函数的返回值是否可以很好地使用 php 全局变量?有没有办法避免全局变量?
或者,或者,什么情况下可以很好地使用 php 全局变量?全局变量什么时候好用?
【问题讨论】:
-
但是如果结果是同一个键,你怎么能避免重写值,即使使用全局?
-
@sectus 密钥相同,但“子密钥”不同。使用全局变量它可以正常工作,就好像您已经完成了
$processedData[$key]['somedata']、$processedData[$key]['moredata']和$processedData[$key]['evenmore']。不过,您的回答也有效。