Как вы используете символ @ в имени объекта PHP - PullRequest
9 голосов
/ 15 октября 2010

У меня есть XML-файл с меткой @attributes для одного из имен

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [PART_NUMBER] => ABC123

Я хочу сделать ссылку на этот объект, например $ product -> @ attribute ['part_number'] но, конечно же, символ @ вызывает ошибку.

Так как мне ссылаться на этот элемент в объекте?

Ответы [ 4 ]

12 голосов
/ 15 октября 2010

Что ж, в случае SimpleXML вы бы вызвали метод $product->attributes(), как определено в руководстве . Это даст вам имена атрибутов сопоставления массива со значениями.

4 голосов
/ 18 ноября 2013

$obj:

stdClass Object
(
    [@id] => Hello
    [$] => World!
)

Для доступа @id и $:

echo $obj->{'@id'};
echo ' ';
echo $obj->{'$'};
2 голосов
/ 15 октября 2010

$product[0]['PART_NUMBER'] должно работать.

Если вы получили более одного атрибута, вы должны использовать $product->attributes() в foreach

атрибуты в руководстве SimpleXML

1 голос
/ 15 октября 2010

Если вы используете объекты SimpleXML, в него уже встроен метод attributes (без знака @) - используйте его так: $product->attributes('part_number');

Если вы пытаетесь создать свои собственные объекты для сопоставления с XML, то, как вы уже выяснили, вы не можете использовать символ @ в имени переменной PHP (или любой другой символ, кроме подчеркивания).

Я бы предложил просто использовать $product->attributes['part_number'] (т.е. вообще без символа @) и отобразить его внутри своего класса.

Если вам действительно нужно сопоставить его с именами переменных, лучшее, на что вы можете надеяться, это какая-то строка замены, которую вы можете поменять местами при преобразовании между двумя форматами.

Например: $product->at__attributes['part_number']

Но это не очень хорошее решение, ИМХО.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...