#php #object
#php #объект
Вопрос:
Вопрос из двух частей: после вызова API Mixpanel мне возвращается что-то вроде этого
stdClass Object (
[legend_size] => 1
[data] => stdClass Object (
[series] => Array (
[0] => 2011-04-06
[1] => 2011-04-07 )
[values] => stdClass Object (
[Login loaded] => stdClass Object (
[2011-04-06] => 1
[2011-04-07] => 1
)
)
)
)
Допустим, я сохранил это в $data
Если я сделаю
$value = $data->data->values->Login loaded
Я получаю сообщение об ошибке из-за пробела между Login и loaded. Как мне избежать этого пространства?
Второй вопрос
Как только я выясню вышесказанное, могу ли я сделать что-то вроде
$value = $data->data->values->Login->$date
где
$date = '2011-05-06'
? Могу ли я вставить переменную вместо имени класса?
Спасибо.
Ответ №1:
Первый вопрос: $value = $data->data->values->{'Login loaded'}
или:
$key = 'Login loaded';
$value = $data->data->values->$key
Второй вопрос: Да
Вы можете практически использовать что угодно в качестве имени переменной (включая элементы объекта), если используете переменные переменные, {}
оболочки переменных и тому подобное.
Например.:
$this->$foo
${'a weird variable name'}
$object->$something->{'very weird'}
$foo = 'bar'; $$foo = 3; // $bar = 3 now.
РЕДАКТИРОВАТЬ: Пока мы этим занимаемся, это никогда не является допустимым:
$foo = new Foo;
$foo::bar(); // syntax error
Вы не можете получить доступ к статическим свойствам экземпляра класса, хранящимся в переменной. Однако вы могли бы сделать что-то вроде:
$foo = new Foo;
call_user_func(get_class($foo) . '::bar');