Ошибка синтаксиса PHP - PullRequest
       10

Ошибка синтаксиса PHP

1 голос
/ 09 марта 2010

Может кто-нибудь объяснить мне, почему следующее приводит к синтаксической ошибке (неожиданно '=')?

protected function processDates()
  {
       foreach($this->dates as $name => $unitprefix)     
       {
            $this->$unitprefix.'year' = '';   
            $this->$unitprefix.'month' = '';
            $this->$unitprefix.'day' = '';
       }
  }

Очевидно, я не собираюсь оставлять эти значения пустыми, но прежде чем продолжить, мне нужно исправить текущую проблему.

Любой совет приветствуется.

Спасибо.

1 Ответ

8 голосов
/ 09 марта 2010

Попробуйте

$this->${$unitprefix.'year'} = '';

Но, чтобы дать лучший совет, было бы хорошо узнать свойства вашего класса и то, что содержит $unitprefix.

Ссылка: Переменные

Для более подробной информации:
Ваш код не понятен парсеру так, как вы его пишете. Если предположить $unitprefix = 'foo', ваш код можно интерпретировать двумя способами:

  1. Получите значение $this->$unitprefix, т.е. $this->foo и добавьте 'year'. Тогда ваш код приведет к (с $this->foo = bar):

    'baryear' = '';
    Я думаю, это то, что делает парсер, поскольку это соответствует оценке кода слева направо.

  2. Добавьте 'year' к $unitprefix и получите свойство с результирующим именем, то есть результирующий код:

    $this->fooyear = '';

Второй - это beviour, который вы хотите иметь, но без ${} парсер не знает, что делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...