Що таке несподівана T_VARIABLE у PHP?


86

Я отримую цю помилку PHP:

Помилка синтаксичного аналізу: помилка синтаксису, несподівана T_VARIABLE

З цього рядка:

$list[$i][$docinfo['attrs']['@groupby']] = $docinfo['attrs']['@count'];

Щось не так із цим рядком?


1
X-Ref: помилки синтаксичного аналізу / синтаксису PHP; та Як їх вирішити? - Несподівана T_VARIABLE для інших поширених причин та виправлень, пов'язаних із контекстом.
Маріо

Відповіді:


189

Перед вставленою лінією може стояти крапка з комою або дужка.

Мені це здається чудовим; кожен рядок дозволений як індекс масиву.


О, ви мені нагадали, це дужка пропущена. Чому це називається T_VARIABLE?
omg

2
Повідомлення про помилку повідомляє вам, що там (несподівано), а не те, чого не вистачає. І є змінна, тому вона точно вам це говорить.
OregonGhost

2
Тому що несподіване $list- це змінна.
Майкл Крелін - хакер

2
тому що php очікував дужки і знайшов змінну, тому він повідомляє вам "несподівану змінну"
knittl

24

Це може бути також якась інша лінія. PHP не завжди є таким точним.

Можливо, вам просто не вистачає крапки з комою на попередньому рядку.

Як відтворити цю помилку, помістіть це у файл із назвою a.php:

<?php
  $a = 5
  $b = 7;        // Error happens here.
  print $b;
?>

Запустіть:

eric@dev ~ $ php a.php

PHP Parse error:  syntax error, unexpected T_VARIABLE in
/home/el/code/a.php on line 3

Пояснення:

Синтаксичний аналізатор PHP перетворює вашу програму на ряд токенів. A T_VARIABLE- маркер типу ЗМІННИЙ. Коли синтаксичний аналізатор обробляє маркери, він намагається зрозуміти їх і видає помилки, якщо отримує змінну, де жодна не допускається.

У наведеному вище простому випадку із змінною $bпарсер намагався обробити це:

$a = 5 $b = 7;

Синтаксичний аналізатор PHP дивиться на $ b після 5 і каже "це несподівано".


2

У моєму випадку мова йшла про версію PHP.

Файл .phar, який я використовував, не був сумісним з PHP 5.3.9. Переключення інтерпретатора на PHP 7 це виправило.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.