Я пытаюсь получить доступ к номеру в элементе ниже, но у меня возникли проблемы с получением этого значения.
echo $object->0; //returns Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$' SimpleXMLElement Object ( [0:public] => 15810 )
Любые идеи о том, как я могу получить эту ценность?
Обновить
Я понимаю, что это странная ошибка … Я использую API ebay для получения этого значения. Даже когда я это делаю:
$zero = 0; $print_r($ruleXml->HourlyUsage->$zero);
Он по-прежнему показывает то же самое
SimpleXMLElement Object ( [0:public] => 15810 )
Я попробовал {0}
Вот результат того, с чем я работаю.
[1] => SimpleXMLElement Object ( [CallName:public] => AddItem [CountsTowardAggregate:public] => false [DailyHardLimit:public] => 100000 [DailySoftLimit:public] => 100000 [DailyUsage:public] => 0 [HourlyHardLimit:public] => 100000 [HourlySoftLimit:public] => 100000 [HourlyUsage:public] => 0 [Period:public] => -1 [PeriodicHardLimit:public] => 0 [PeriodicSoftLimit:public] => 0 [PeriodicUsage:public] => 0 [ModTime:public] => 2010-05-04T18:06:08.000Z [RuleCurrentStatus:public] => NotSet [RuleStatus:public] => RuleOn )
Итак, вот что …
number_format($ruleXml->HourlyUsage) //throws the error: number_format() expects parameter 1 to be double, object given $ruleXml->HourlyUsage //shows the value on the page
$x = 0; echo $object->$x;
или
echo $object->{0};
Причина в том, что '0' не является допустимым идентификатором в PHP. Поэтому, когда вы вводите «0», все, что он видит, это T_LNUMBER. Все имена следуют за соглашением о присвоении имен. Единственное отклонение состоит в том, что переменной-члену, которой предшествует a->, не нужен префикс $. http://www.php.net/manual/en/language.variables.basics.php
{0} работает, потому что {} указывает, что идентификатор является результатом простого выражения внутри. Таким образом, {$ x} в этом случае совпадает с $ x, но {0} не совпадает с '0', так как они приводят к различным токенам анализатора.
Я не знаю, что такое бизнес с узлами с именем «0», но ошибка, которую вы видите, состоит в том, что SimpleXML всегда возвращает объекты. Если вам нужно использовать результат как число, примените его к соответствующему типу, например
number_format((int) $ruleXml->HourlyUsage)
Элементы XML не могут начинаться с цифры . Даже если вы можете каким-то образом создать такие элементы, SimpleXML (и, скорее всего, большинство парсеров) не сможет прочитать результирующий документ.
<!-- legal --> <a0>foo</a0> <!-- not legal -- note how even Stack Overflow's highlighter chokes on it --> <0>foo</0>
Вы можете использовать __toString()
для получения строкового значения дочернего объекта, поэтому он будет похож на $object->__toString();