У меня есть один скрипт, который имеет несколько строк кода, похожих на этот:
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";}
?>
Код работает без ошибок, и я получил ожидаемый результат:
Я принял задание.
Что может быть неправильным?
Это закончилось тем, что ошибка парсера была полностью исключена.
Проблема заключалась в том, что в какой-то момент я включил ранее написанный блок heredoc внутри нового оператора if
для которого я отбросил весь код, включая блок heredoc. Пытаясь запустить код после многих других изменений, синтаксический анализатор не нашел конца блока heredoc, потому что он не был помещен в начале строки и продолжал читать, пока не нашел то, что он не мог понять, в моем случае, конкретный:
$SetUpArray[$TableName.'_'.$Index.'_InView']
выражение.
Извлеченный урок, остерегайтесь украшающего или отступающего кода блоками heredoc и не проверяя, что заключительная инструкция heredoc (v.gr "EOD;") помещается точно в начале строки. Парсер, скорее всего, даст странную ошибку, которую трудно отследить. (Не его вина.)