如何在PHP对象的名称中使用@符号

时间:2010-10-15 12:46:57

标签: php object reference

我有一个XML文件,其中一个名称为

的标签为@attributes
SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [PART_NUMBER] => ABC123

我想像$ product-> @attributes ['part_number']那样引用这个对象,但当然@符号会导致错误。

那么如何在对象中引用此项?

4 个答案:

答案 0 :(得分:12)

嗯,对于SimpleXML,您可以调用manual中定义的$product->attributes()方法。这将为您提供一个数组映射属性名称到值。

答案 1 :(得分:3)

$obj

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

要访问@id$

echo $obj->{'@id'};
echo ' ';
echo $obj->{'$'};

答案 2 :(得分:2)

$product[0]['PART_NUMBER']应该有用。

如果您有多个属性,则应在$product->attributes()

中使用foreach

attributes in SimpleXML manual

答案 3 :(得分:1)

如果您正在使用SimpleXML对象,则已经内置了attributes方法(没有@符号) - 请按照以下方式使用它:$product->attributes('part_number');

如果您正在尝试创建自己的对象以映射到XML,那么正如您已经发现的那样,您不能在PHP变量名中使用@符号(除了下划线之外的任何其他符号) )。

我建议您只使用$product->attributes['part_number'](即根本不使用@符号)并将其映射到您的课程中。

如果真的需要将它映射到您的变量名称,那么您真正希望的最好的是某种替换字符串,您可以在两种格式之间进行转换时进行交换

例如:$product->at__attributes['part_number']

但这并不是一个特别好的解决方案,恕我直言。