Объект Mixpanel php

#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');