How to access an object property with a minus-sign?

前端 未结 2 1175
醉梦人生
醉梦人生 2020-12-11 01:46

I got an object (in PHP) and I can\'t print the content. In debug-mode it\'s like this:

stdClass Object
(
    [pre-selection] => 1
)

But

相关标签:
2条回答
  • 2020-12-11 02:35

    You could try

    $object->{'pre-selection'};
    

    http://php.net/manual/en/language.types.string.php#language.types.string.parsing.complex

    See also Example 2 of json_decode()

    Example #2 Accessing invalid object properties

    Accessing elements within an object that contain characters not permitted under PHP's naming convention (e.g. the hyphen) can be accomplished by encapsulating the element name within braces and the apostrophe.

    <?php
    
    $json = '{"foo-bar": 12345}';
    
    $obj = json_decode($json);
    print $obj->{'foo-bar'}; // 12345
    
    ?>
    

    Update (thanks to salathe):

    Curly braces may also be used, to clearly delimit the property name. They are most useful when accessing values within a property that contains an array, when the property name is made of mulitple parts, or when the property name contains characters that are not otherwise valid

    0 讨论(0)
  • 2020-12-11 02:35

    There are multiple ways, the problem is that the PHP tokenizer will choke on the - sign in the code, howver you can write it so that the parser does not complains:

    echo $object->{'pre-selection'};
    

    or

    $property = 'pre-selection'
    echo $object->$property;
    

    or

    $array = (array) $object;   
    echo $array['pre-selection'];
    

    In these cases, the PHP parser does not run about a place in the raw code that it has a problem to parse with any longer.


    Wondering where this is documented. For example in the SimpleXML documentation:

    Accessing elements within an XML document that contain characters not permitted under PHP's naming convention (e.g. the hyphen) can be accomplished by encapsulating the element name within braces and the apostrophe.

    Example #3 Getting <line>

    <?php
    include 'example.php';
    
    $movies = new SimpleXMLElement($xmlstr);
    
    echo $movies->movie->{'great-lines'}->line;
    ?>
    

    The above example will output:

    PHP solves all my web problems
    
    0 讨论(0)
提交回复
热议问题