在PHP中正确使用全局变量 - 从函数添加到数组

时间:2014-10-15 00:47:56

标签: php arrays scope

上下文:两个函数处理需要组合成单个数组的xml数据。

我正在处理多个Feed并将其组合成一个多级关联数组,如下所示:

$processedData:
Array ( 
    [item1] => Array ( 
        [somedata] => tasty
        [moredata] => food
        [evenmore] => like pizza
    ) 
    [item2] => Array ( 
        [somedata] => less tasty
        [moredata] => food
        [evenmore] => like bread pudding
    ) 

每个函数都在单独的数据上运行,每个函数都给我一些我需要的数据;例如,somedatamoredata来自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来轻松完成。根据{{​​3}},将返回值与array_merge+相结合将使用相同的密钥覆盖值。

注意:与大多数关于全局变量的其他问题不同,问题不是输入值,而是输出值。

问题php manual建议明确标记全局变量以解决全局变量的常见问题,但几乎所有关于堆栈溢出的答案都是:PHP中的Global Vars说"你可以这样做,但你可能不应该。"

我的问题

组合多个函数的返回值是否可以很好地利用php全局?有没有办法避免全局变量?

或者,或者,什么案例是一个很好的使用PHP全局?全局变量何时可以使用?

1 个答案:

答案 0 :(得分:1)

您可以使用引用将变量作为第二个参数传递。

function one($xml, &$processedData){}
function two($xml, &$processedData){}

它可以帮助您避免使用全局。

http://php.net/manual/en/functions.arguments.php#functions.arguments.by-reference