Сбой альтернативного условного синтаксиса (if-else) в PHP 5.3.0 (xampp) - PullRequest
2 голосов
/ 12 октября 2009

Я недавно обновился до xampp v1.7.2, который сбросил на меня PHP 5.3. Наряду с этим все мои httpd.confs и php.ini были уничтожены (я считал само собой разумеющимся, что этот выпуск будет обновлением, как и все предыдущие выпуски xampp). В любом случае, мне понадобилось время, чтобы перенастроить все сервисы - но теперь я столкнулся с забавной проблемой.

Эта самостоятельно написанная CMS, которая используется на моем рабочем месте, использует множество альтернативных условных синтаксисов для if-else, т.е.

if( condition ): ?>
    <some html />
<?php else: ?>
    <some other html />
<?php endif;

Раньше это нормально работало с PHP 5.2.x, который шел вместе с xampp 1.7.1 - и теперь неожиданно такие блоки кода выдают эту ошибку:

Ошибка разбора: синтаксическая ошибка, неожиданная T_ELSE в ...

Я никоим образом не изменил свой сценарий - тот же самый, который работал абсолютно без помех в PHP 5.2.x.

Итак, мой вопрос: допускает ли PHP 5.3 такие альтернативные условия? Или мне нужно включить некоторые скрытые опции в моих файлах конфигурации?

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

Ответы [ 2 ]

4 голосов
/ 12 октября 2009

Хотя синтаксис if / else не изменился в 5.3, во многих других частях синтаксиса есть. Вы должны проверить строки непосредственно перед рассматриваемым оператором else, чтобы увидеть, не сбивает ли синтаксический анализ одна из других новых функций синтаксиса.

Если вы не можете выяснить, в чем проблема, вы всегда можете просто начать систематически удалять строки кода, пока у вас не останутся следующие три строки:

<?php if(condition): ?>
<?php else: ?>
<?php endif ?>

Обновление: Вы действительно должны протестировать свой код с включенным short_open_tag, потому что синтаксическая ошибка, которую вы видите, это то, что вы получите, если у вас где-нибудь будет этот код:

<? if(condition): ?>
<?php else: ?>
<?php endif ?>
0 голосов
/ 12 октября 2009

Да, PHP 5.3 допускает альтернативный синтаксис для управляющих структур, включая ваши условные операторы.

Я бы предложил попробовать отладить, заменив альтернативный синтаксис обычным синтаксисом в одном или двух местах, чтобы посмотреть, решит ли он проблему. Если да, то вы точно знаете, в чем проблема.

...