Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный T_OBJECT_OPERATOR

Я получаю следующую ошибку при попытке добавить некоторые данные из myXml.xml в строку: Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный T_OBJECT_OPERATOR.

    $xmlstr = file_get_contents('myXml.xml');
    $xml = new SimpleXMLElement($xmlstr); 

    foreach($xml->order as $order){
            $replace = array();
            $firstName = (string) $order->billing-address->first-name;
            $lastName = (string) $order->billing-address->last-name;
    }

Я не могу предоставить свой XML напрямую, так как он содержит конфиденциальные данные.

Спасибо, Сэм


person Sam    schedule 09.07.2010    source источник


Ответы (1)


Знак - означает вычитание. Чтобы использовать его в именах свойств, вы должны использовать этот синтаксис:

$firstName = (string) $order->{"billing-address"}->{"first-name"};
$lastName = (string) $order->{"billing-address"}->{"last-name"};

В общем случае, вероятно, лучше использовать firstName, billingAddress и т. д. в качестве имен свойств, чтобы избежать этого. См. CamelCase. Однако в этом случае у вас может не быть контроля над вводом XML.

person Artefacto    schedule 09.07.2010
comment
@Sam Теперь ваш код понимает PHP: $order->billing - address->first - name; адрес и имя считаются константами для этой цели. Но у вас не определены эти константы, поэтому PHP думает, что вы имеете в виду адрес строки и имя, и пытается использовать T_OBJECT_OPERATOR, например -> в строке не работает. - person Gordon; 09.07.2010
comment
Великолепно, спасибо вам обоим за наши ответы. Вы правы в том, что не имеете контроля над XML. Я попробую сейчас. Редактировать: Сработало отлично, спасибо! - person Sam; 09.07.2010