Ошибка создания синтаксического анализатора на конкретном экземпляре часто используемого экземпляра поля массива

1

У меня есть один скрипт, который имеет несколько строк кода, похожих на этот:

if ($SetUpArray[$TableName.'_'.$Index.'_InView']) 
    { /// xxx code
    }

Но когда скрипт запускается, синтаксический анализатор бросает:

Ошибка PHP Parse: синтаксическая ошибка, неожиданный '.', Ожидающий ']' в /home/segucom/public_html/CRUD/ShowColumn.php в строке 192.

Интересно, что это только начало происходить сегодня. Код имеет несколько сконструированных дескрипторов массива до этого, очень похоже на него: (v.gr. "_Editable" vs "_Inview") и не набрасывать на них ошибки.

Еще более интересным является то, что я могу воспроизвести его на живом сайте, но строка itsef не выдает ошибки, если тестируется на www.phpfiddle.org.

Ниже мой тестовый код, используемый в phpfiddle:

<?php

$SetUpArray = array();
$TableName = "contabilidad";
$Index = 1;

// Make an assignment
$SetUpArray[$TableName.'_'.$Index.'_FieldName'] = 7;

// Another assignment
$FieldName = trim($SetUpArray[$TableName.'_'.$Index.'_FieldName']);   

// Test for value
if ($SetUpArray[$TableName.'_'.$Index.'_FieldName'] == 7)
    {
    echo "I accepted the assignment";
    } else {echo "I did not understood the assignment";}

?>

Код работает без ошибок, и я получил ожидаемый результат:

Я принял задание.

Что может быть неправильным?

Теги:

1 ответ

1

Это закончилось тем, что ошибка парсера была полностью исключена.

Проблема заключалась в том, что в какой-то момент я включил ранее написанный блок heredoc внутри нового оператора if для которого я отбросил весь код, включая блок heredoc. Пытаясь запустить код после многих других изменений, синтаксический анализатор не нашел конца блока heredoc, потому что он не был помещен в начале строки и продолжал читать, пока не нашел то, что он не мог понять, в моем случае, конкретный:

$SetUpArray[$TableName.'_'.$Index.'_InView']

выражение.

Извлеченный урок, остерегайтесь украшающего или отступающего кода блоками heredoc и не проверяя, что заключительная инструкция heredoc (v.gr "EOD;") помещается точно в начале строки. Парсер, скорее всего, даст странную ошибку, которую трудно отследить. (Не его вина.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню