Просто чтобы прояснить несколько вещей для вас, чтобы вы и другие могли избежать этой проблемы в будущем:
- У вас возникла непредвиденная синтаксическая ошибка
- Я взял кодпод вопросом и запустил
php -l filename.php
Ваш файл проверен, поэтому я могу сказать, что это не пропущенный начальный или конечный блок или точка с запятой. - Я также отметил, что вы смешивали типы тегов, что не очень хорошая идея.,Я подозревал, что это, возможно, проблема с
short_open_tag = off
, однако php был изменен, поэтому тег <?=
доступен даже без short_open_tag = on .Это имело место с php версии 5.4.С учетом вышесказанного мы так и не добрались до точки проверки вашей настройки short_open_tag.
Как я полагаю, вы знаете,
<?= $somevar ?>
Это эквивалент
<?php echo somevar; ?>
Я знаю, что вы использовали <?=
, и это, в зависимости от версии, не должно быть проблемой с той версией php, которую вы использовали.Использование только <?
является проблемой, и, похоже, именно здесь у вас возникла проблема, и анализатор был сбит с толку, но до этого момента вы использовали <?php
, <?
и <?=
, что является причиной отсутствия согласованностив конечном итоге вызывает проблемы.
При выполнении большого количества смешивания PHP и HTML, как вы, я понимаю привлекательность <?=
и поддержку его со стороны PHP.
Я также выступаю за то, что есливы решили использовать PHP для его встроенных шаблонизаторских возможностей, а затем использовать альтернативный синтаксис для управляющих структур .Существует альтернативный синтаксис if, while, for, foreach и switch.
При смешивании с html они лучше сочетаются и более удобочитаемы, окружая и перемешивая HTML, как и вы.
InНа самом деле, короткие открытые теги стали официально осуждаемыми и теперь отключены по умолчанию, но в большинстве случаев, когда у кого-то есть приложение на основе PHP, они не будут конфликтовать с чем-либо или вызывать проблемы.Я не советую идти против зерна, а просто признаю реальность.О единственной вещи, с которой short_open_tag = on вызывает проблему, является то, что если вы используете PHP для вывода XML-файла, и вы смешиваете XML с PHP, как в:
<?xml version="1.0" ?>
<? //Some php ?>
Даже при наличии простого обходного пути,но это, безусловно, крайний случай.
В общем, вы могли бы избежать этой проблемы, просто будучи последовательными в использовании тегов, и последовательность - это хороший способ улучшить общее качество вашего кода.
Мой последний совет: при использовании больших шаблонов существует ряд хорошо зарекомендовавших себя библиотек шаблонов php, которые могут помочь вам отделить логику от выходных данных.В MVC это будет отделять C (ontrol) от V (iew) в вашем случае.Шаблонные движки, на которые стоит обратить внимание: это Laravel's Blade, Symfony's Twig, Smarty и Plates.
Перемещая всю вашу разметку в файл шаблона, управляющие / логические части вашего кода будут краткими и простыми.В вашем представлении все еще есть много логики, поскольку вы выполняете циклы, но все перечисленные мной механизмы шаблонов имеют функции, которые позволяют выполнять циклы на структурах данных и предоставляют небольших помощников для манипулирования данными.
Например, здесь приведен фрагмент кода шаблона веточки, который зацикливается на массиве:
<!-- templates/homepage.twig -->
<h1>{{ pageTitle }}</h1>
<div class="row">
{% for product in products %}
<div class="span4">
<h2>{{ product }}</h2>
</div>
{% endfor %}
</div>
Я взял это из бесплатного урока от ребят из KNPUniversity.Принцип КНПУ - ведущий специалист по документации проекта Symfony.Если вам нравится материал, полный курс по веткам по разумной цене, но вы узнаете немало, в том числе кое-что о вышеупомянутых альтернативных структурах контроля, просто прочитав материал, приложенный к странице курса.
Помимо решенияя надеюсь, что это поможет вам с рефакторингом и улучшением вашего проекта и тех, с которыми вы столкнетесь в будущем.