Что такое неожиданный 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- токен типа 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.