Правильное использование глобальных переменных при добавлении массива из функции

Контекст: две функции, обрабатывающие данные 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 в верхней части каждой функции. Объединение возвращаемых значений с array_merge а также + перезапишет значения одним и тем же ключом, в соответствии с Руководство по PHP.

Примечание: в отличие от большинства других вопросов о глобалах, проблема заключается не во входных значениях, а в выходных значениях.

Вопрос Глобальные переменные в PHP считаются плохой практикой? Если так, то почему? предлагает четко обозначить глобальные переменные для решения общих проблем с глобальными переменными, но почти каждый ответ на переполнение стека повторяет: Global Vars в PHP говорит «Вы можете сделать это, но вы, вероятно, не должны».

Мой вопрос

Является ли объединение возвращаемых значений из нескольких функций хорошим использованием php глобалов? Есть ли способ сделать это, избегая глобальных переменных?

Или, в качестве альтернативы, в каких случаях хорошо использовать php globals? Когда можно использовать глобальные переменные?

0

Решение

Вы можете передать свою переменную в качестве второго аргумента, используя ссылку.

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

Это поможет вам избежать использования глобальных.

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]