Я уже видел это раньше, но мой конкретный случай, похоже, чей-то странный, и я не могу его разрешить – любое понимание будет оценено по достоинству.
Я пытаюсь получить доступ к объекту с переменным значением, т. Е.
$foo = new Object(); $foo->first = 'bar'; $array = array(0 =>'first', 1 =>'second'); $var = 0; return $foo->{$array[$var]};
Это вызывает ошибку «Примечание: неопределенное свойство: stdClass :: $ first». Удаление фигурных скобок возвращает одинаковый результат.
Что я не понимаю? (Фактический код и ошибка ниже – ошибка записывается в журнале Watchdog Drupal).
private function load_questionnaire_queue($type, $comparator_id, $comparing_id_array) { $queue = array(); $type_map = array( 0 => "field_portfolio_district['und'][0]['nid']", 1 => "field_time_period['und'][0]['tid']", ); foreach ($this->questionnaires as $q) { // The commented code below works as expected // if ($q->field_portfolio_district['und'][0]['nid'] == $comparator_id && // in_array($q->field_time_period['und'][0]['tid'], $comparing_id_array)) // This returns an identical error, with or without braces: if ($q->{$type_map[$type]} == $comparator_id && in_array($q->{$type_map[!$type]}, $comparing_id_array)) { $queue[] = node_view($q, $view_mode = 'full'); } } $this->queue = $queue; }
Примечание: Неопределенное свойство: stdClass :: $ field_portfolio_district ['und'] [0] ['nid'] в ComparisonChart-> load_questionnaire_queue ()
Это работает как шарм:
<?php $foo = new StdClass(); $foo->first = 'bar'; $array = array(0 =>'first', 1 =>'second'); $var = 0; echo $foo->{$array[$var]}; ?>
Но я сомневаюсь, что это сработает:
<?php $foo = new StdClass(); $foo->first = array('a' => array('b' => 'test')); $array = array(0 =>'first["a"]["b"]', 1 =>'second'); $var = 0; echo $foo->{$array[$var]}; ?>