Пагубная попытка получить свойство необъекта Ошибка PHP

Я анализирую XML-файл в PHP как DOMDocument. Это часть относительно стабильного кода, который я написал недавно для анализа нашего XML, и до недавнего времени он работал нормально. Посреди множества похожих утверждений у меня есть следующая строка кода:

    $appDomain = $domDoc->getElementsByTagName("appDomain")->item(0)->textContent;

Этот метод выдает ошибку «Попытка получить свойство не-объекта», но код все равно проходит и работает нормально.

Что сводит меня с ума, так это следующее. Используя копирование / вставку, я добавил следующую строку.

    echo "". $domDoc->getElementsByTagName("appDomain")->item(0)->textContent;
$appDomain = $domDoc->getElementsByTagName("appDomain")->item(0)->textContent;

Так что теперь я запускаю один и тот же код дважды, один раз повторяя его и один раз сохраняя. Эхо правильно печатает значение тега (то есть Extract) из моего XML, но я все еще получаю сообщение об ошибке, и строка ошибки — это присвоение строке $ appDomain, не линия эха.

Кроме того, если я добавлю

echo $appDomain;

сразу после этого вызова он печатает правильное значение «Извлечь», как будто ошибки не произошло. Если я закомментирую присвоение $ appDomain, я соответствующим образом получаю ошибку «Undefined variable» в строке echo $ appDomain (я просто сделал это, чтобы проверить, что $ appDomain не установлен где-то еще). Если я затем добавлю жестко закодированный $ appDomain, вот так:

    echo "". $domDoc->getElementsByTagName("appDomain")->item(0)->textContent;
//$appDomain = $domDoc->getElementsByTagName("appDomain")->item(0)->textContent;
$appDomain = "Extract";
echo $appDomain;

Теперь код печатает «ExtractExtract» соответствующим образом, но я получаю попытку получить ошибку свойства в ПЕРВОЙ строке эха.

ЧТО ЖЕ ТАКОЕ ПРОИСХОДИТ? Тег находится в XML (уже некоторое время, и этот код работает нормально). Код правильно получает элемент, получает его текстовое содержимое и правильно помещает его в переменную $ appDomain. Но все равно выдает ошибку.

Кроме того, следующие var_dumps, похоже, ведут себя именно так, как и должны:

    var_dump($domDoc->getElementsByTagName("appDomain"));
echo "<br><br>";
var_dump($domDoc->getElementsByTagName("appDomain")->item(0));
echo "<br><br>";
var_dump($domDoc->getElementsByTagName("appDomain")->item(0)->textContent);

Я получаю следующее:

object(DOMNodeList)#3 (1) { ["length"]=> int(1) }

object(DOMElement)#2 (18) { ["tagName"]=> string(9) "appDomain" ["schemaTypeInfo"]=> NULL ["nodeName"]=> string(9) "appDomain" ["nodeValue"]=> string(7) "Extract" ["nodeType"]=> int(1) ["parentNode"]=> string(22) "(object value omitted)" ["childNodes"]=> string(22) "(object value omitted)" ["firstChild"]=> string(22) "(object value omitted)" ["lastChild"]=> string(22) "(object value omitted)" ["previousSibling"]=> string(22) "(object value omitted)" ["nextSibling"]=> string(22) "(object value omitted)" ["attributes"]=> string(22) "(object value omitted)" ["ownerDocument"]=> string(22) "(object value omitted)" ["namespaceURI"]=> NULL ["prefix"]=> string(0) "" ["localName"]=> string(9) "appDomain" ["baseURI"]=> string(62) "/Applications/MAMP/htdocs/Tmp/bowersjc/Experiment33/config.xml" ["textContent"]=> string(7) "Extract" }

string(7) "Extract" Extract

Но я получаю сообщение об ошибке в последнем var_dump (и если я закомментирую его, я не получу ошибок).

Опять же, ЧТО ПРОИСХОДИТ?

0

Решение

Я столкнулся с той же ошибкой в ​​методе рекурсивного класса, где объект определенно был объектом, но ошибка (предупреждение) продолжала происходить.

Сначала вы можете проверить, что это действительно объект с is_object($el)

Иногда рекурсия (парсеры xml являются рекурсивными) и передача аргументов в методы объекта могут вызвать проблемы. Это может быть связано с аргументом ->item(0), Пытаться ->item()[0] для элемента 0 вместо аргумента 0.

0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector