2013-05-16 2 views
3

Почему эта работаСвойства объекта PHP из переменной класса?

foreach ($items as $i) { 
    $dataTitle = $this->dataTitle; 
    $title = $i->$dataTitle; 
} 

когда это не делает?

foreach ($items as $i) { 
    $title = $i->$this->dataTitle; 
} 

Есть ли лучший способ сделать это?

+0

Я не думаю, что это довольно дубликат. Я не конкатенирую вещи для одного. Я думал, что '$ this-> dataTitle' является переменной внутри и сам; переменная класса. С этим мышлением я не понимал, почему это не сработало. – Justin808

+0

Тем не менее, он охватывает правильный синтаксис, который вы должны использовать для этой концепции. –

+0

Возможно, но только потому, что два вопроса имеют один и тот же ответ, это не значит, что это один и тот же вопрос. Не стесняйтесь отмечать его поближе, по вашему выбору. Я просто прокомментировал, почему я думал, что это не дубликат. – Justin808

ответ

3

$this referes к текущему объекту разобранного в не очевидном порядке. Вы должны использовать нотацию {expr}, чтобы динамически оценивать имя свойства.

Попробуйте использовать {} вокруг $this->dataTitle:

$title = $i->{$this->dataTitle}; 

Посмотрите на нижней части последнего примера в variable variables разделе руководства.

+0

Bingo. Хотя почему {} и not()? Я думал() использовался для группировки вещей для порядка операций, и это похоже на то, что здесь – Justin808

+0

@ Justin808 Это не операция группового заказа. Это операция оценки свойств. – BlitZ

4

Попробуйте это:

$title = $i->{$this->dataTitle}; 

Ваше выражение разбираемый как:

$title = ($i->$this)->dataTitle; 
+0

Ошибка анализа PHP: синтаксическая ошибка, неожиданный '(', ожидающий идентификатор (T_STRING) или переменная (T_VARIABLE) или '{' или '$' в SimpleList.php – Justin808

+0

Исправлено Выражение после '->' должно быть в '{}'. – Barmar

Смежные вопросы