How do I access this object property with an illegal name?

<?php
$x = new StdClass();
$x->{'todo-list'} = 'fred';
var_dump($x);

So, $object->{'todo-list'} is the sub-object. If you can set it like that, then you can also read it the same way:

echo $x->{'todo-list'};

Another possibility:

$todolist="todo-list";
echo $x->$todolist;

If you wanted to convert it to an array, which can be a little more easily (ie the obvious $ret['todo-list'] accessing), this code is taken almost verbatim from Zend_Config and will convert for you.

public function toArray()
{
    $array = array();
    foreach ($this->_data as $key => $value) {
        if ($value instanceof StdClass) {
            $array[$key] = $value->toArray();
        } else {
            $array[$key] = $value;
        }
    }
    return $array;
}

Leave a Comment