Как избежать ошибки Netbeans с помощью HTML-блока, вложенного в оператор PHP if - PullRequest
1 голос
/ 10 января 2011

Рассмотрим следующий пример:

<table>
    <tr>
        <td>Row One</td>
    </tr>
    <?php
    if ($rowtwo)
    {
    ?>
    <tr>
        <td>Row Two</td>
    </tr>
    <?php
    }
    ?>
</table>

Если $rowtwo имеет значение true, выводится вторая строка, в противном случае она пропускается.

Код работает, как требуется, однако яоценка Netbeans (7 бета) как PHP IDE (вместо простого использования текстового редактора).Netbeans помечает код ошибкой:

Нераспределенные непробельные символы в таблице [sic].

Следует ли рассмотреть альтернативный способ написания этого кода, илиNetbeans неспособен понять эту оболочку управления потоком для вывода HTML?

Редактировать

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

Удаление пробелов перед тегами <?php и ?>, а также использование endif; вместо фигурных скобок дают одинаковую функциональность, но все еще помечены.

Я думаю, что это проблема и / или слабое место при разборе кода Netbeans.

Ответы [ 5 ]

2 голосов
/ 10 января 2011

Одним из преимуществ PHP является возможность вставлять фрагменты кода PHP прямо в ваш HTML. Ваш код выше в порядке. Кроме того, вы можете сделать это следующим образом, но оба они абсолютно одинаковы.

<table>
    <tr>
        <td>Row One</td>
    </tr>
    <?php
    if($rowtwo) {
      echo "<tr>\n";
      echo "\t\t<td>Row Two</td>\n";
      echo "\t</tr>\n";
    }
    ?>
</table>
1 голос
/ 10 января 2011

Ваш код действительный php. NetBeans может пытаться проверить его как HTML, но я не знаю много о NetBeans.

Пара предложений:

  • не ставьте пробелы перед открывающими тегами php (<?php), это облегчает сканирование файла и просмотр местоположения блоков php
  • использовать блоки if (...): endif; для содержимого HTML:

т.е:.

<table>
  <tr>
    <td>Row One</td>
  </tr>
<?php if ($rowtwo): ?>
  <tr>
    <td>Row Two</td>
  </tr>
<?php endif; ?>
</table>

это помогает вам увидеть, где заканчивается оператор if, вместо того, чтобы пытаться определить, какая закрывающая скобка какая Вы также можете сделать это для других управляющих структур .

Изменить для более подробной информации:

Я выбиваю из html-отступа мой php-отступ. Блок следующего уровня будет выглядеть примерно так:

<table>
  <tr>
    <td>Row One</td>
  </tr>
<?php if ($rowtwo): ?>
  <tr>
    <td>Row Two</td>
  </tr>
<?php   if ($condition): ?>
  <tr>
    <td>More Content</td>
  </tr>
<?php   endif; ?>
  <tr>
    <td>Even more content</td>
  </tr>
<?php endif; ?>
</table>

Я должен также упомянуть, что мой элемент body имеет отступ на один уровень, поэтому я редко когда сталкиваюсь с HTML, который находится на одном уровне с моими тегами php. Часто это больше похоже на:

    <table>
<?php if ($condition): ?>
      <tr><td></td></tr>
<?php endif; ?>
    </table>

Что помогает выделить PHP.

1 голос
/ 10 января 2011

Это довольно типичный синтаксис для презентационных представлений в PHP и других похожих языках. Это не элегантно, и это может сбить с толку IDE, но обычно это не считается плохой практикой.

0 голосов
/ 10 января 2011

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

Но опять же, ничего плохого в смешивании html / php!

0 голосов
/ 10 января 2011

Это почти приемлемо по моим стандартам (что я ищу в коде других людей).Единственное изменение, которое я хотел бы сделать, - это правильно сделать отступ, чтобы было проще увидеть, что происходит (сделать ваш код более читабельным).Например:

<table>
    <tr>
        <td>Row One</td>
    </tr>
    <?php
    if ($rowtwo) {
        ?>
        <tr>
            <td>Row Two</td>
        </tr>
        <?php
    }
    ?>
</table>

Таким образом, тривиально увидеть, где заканчивается конструкция if с первого взгляда ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...