переименование имени переменной в php во время выполнения - PullRequest
0 голосов
/ 21 июня 2011

Я пытаюсь преобразовать XML-документ в ассоциативный массив. Я хочу, чтобы имя массива было корневым узлом в документе XML. Я получаю эту информацию по $xml->getName().

Я думал о создании пустого массива с помощью этого оператора, но он не работает.

$($xml->getName()) = array();

Другим способом должно быть создание временной переменной и переименование ее с помощью $xml->getName(). Есть ли способ, которым я могу сделать это в PHP?

Ответы [ 2 ]

3 голосов
/ 21 июня 2011

Вы можете создать его следующим образом:

${$xml->getName()} = array();

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

1 голос
/ 21 июня 2011

Джордж прав, ${$xml->getName()} = array(); позволит вам делать в основном то, что вы просите.

Как и предполагал один день, это плохая идея.Лучше всего обернуть всю эту функциональность в функцию и просто вернуть ее в более широкий контекст.Если вам не удобно, сделайте это ключом в массиве.Но вот проблема:

  1. Вы не можете абстрагировать эту функциональность - представьте, что вы хотите, чтобы это было частью функции или класса (о чем вы должны думатьиз в любом случае ), как бы вы узнали, что класс / контекст вызывающей функции знает, что $ root теперь является ссылкой на ваш XML?
  2. Вы не можете загрузить более одного файла в сценарии, если у вас есть два файла, которые начинаются с <root>, они убьют друг друга (это даже предотвратит использование ключей массива).
  3. Этот будет привести к проблемам отладки.Как минимум, вам необходимо убедиться, что в синтаксисе XML и синтаксисе PHP нет проблем.Это приводит к увеличению времени в циклах отладки и обслуживания и, следовательно, к техническому раздуванию.
  4. Определенно, это разрушительное и неожиданное поведение - это влияет на окружающую среду таким образом,не сразу видны следующему программисту и могут сбрасывать переменные, которые установил другой программист.
...