Чому <? Php і?> У кожному рядку?


24

Я дуже часто бачив цю конвенцію скрізь, і часом вона наближається до того, що мене ганяє:

<?php //The loop ?>
<?php while ( have_posts() ) : the_post(); ?>
    <?php the_content(); ?>
<?php endwhile; // end of the loop. ?>

Де <?phpі закриття ?>є в кожному рядку, навіть якщо немає втручається HTML-коду.

Моє запитання: чому? Навіщо включати всі ці додаткові теги?

Мені здається, ця конвенція додає значну кількість захаращеності коду, дратує наслідувати в першу чергу, і додає, що ще багато місць, щоб випадково залишити тег відкриття чи закриття.

ПРИМІТКА

Це код, витягнутий із теми двадцять дванадцять, на прикладі WordPress.


також стенограма, коли заяви = o
Том Дж. Ноуелл

3
Позначення закривається - остаточної відповіді на це питання немає, і це, звичайно, не специфічне питання WP - будь-яка людина, яка працює з PHP, зіткнеться з цим питанням
anu

3
@anu: По-перше, на запитання може не завжди бути однозначної, остаточної відповіді (хоча вона все ще може мати найкращу відповідь). У керівництві написано "практичне та відповідальне". По-друге, так, це технічно проблема PHP, але я помітив це набагато, набагато більше, за короткий час роботи з WP. Отже, хоча це не обмежується WP, мені здається, що це достатньо співвіднесено, щоб запитати в налаштуваннях WP.
Відступництво

Відповіді:


20

Це не рекомендується в жодному посібнику зі стилю WordPress, і я думаю, що це поганий стиль кодування. Початківці використовують цей стиль, можливо тому, що він більше схожий на HTML ...

На жаль, теми за замовчуванням занадто часто використовують цей стиль, тому деякі початківці можуть подумати, що це частина стилю коду.

Одним з недоліків цього стилю є обробка коментарів. Подивіться уважно на наступний приклад і як це не робить того, що може очікувати автор:

<?php echo 'Important: '; // announcement ?>
<?php echo ' enter the word '; /* start ?>
<?php echo '<b>password</b>'; /* the end */ ?>

Успіху налагоджуючи це. :)

Правило: перемикайтеся між контекстом PHP та HTML, лише якщо вам потрібно створити вихід на обох мовах. Використовуйте регулярні перерви у всіх інших випадках.

Оновлення, подальші думки: Кожен дійсний файл HTML - це повна та дійсна програма PHP. Так, навіть якщо він не містить жодного рядка фактичного коду PHP.

Якщо ви починаєте з HTML і додаєте невеликі шматочки PHP поетапно ... ви можете закінчити стиль, про який ми тут говоримо. Ось де в грі входить рефакторинг : Після того, як все пройде так, як очікувалося, перепишіть код, поки він не стане максимально читабельним, простий у обслуговуванні та розширенні, не повторюючи частини.

Я думаю, що деякі люди щасливі без цього останнього кроку, і тому це не скоро помре.


Шкода, що підсвічування синтаксису вище не показує, що насправді відбувається з цим коментарем ...
webaware

9
@webaware Я думаю, що це ще більше ілюструє проблему. :)
fuxia

Правда :) (плюс кілька
прихильників, щоб

2
@AndyAdams Справедливо, я це перефразував. А тепер іди геть, ти злий рекомендателю. :)
fuxia

3
Теми використовують цей стиль, тому що робити інакше просто занадто потворно. Під час рефакторингу тем я вважаю за краще переписати код, щоб він був максимально читабельним, і це означає, що не мати echo / printf / var_dump навколо, а також розміщувати кожну структуру управління всередині своїх пар, <? ... ?>щоб зробити гніздування легше зрозуміти. Одне, що я б робив інакше, ніж приклад ОП, - це те, що я ставлю the_post();свою власну лінію.
Лі Лі Раян

12

Хоча я уникаю цього для коментарів PHP, я є завзятим відкривачем PHP / ближче у файлах шаблонів. Альтернатива передбачає перегукування HTML через рядки PHP, що, на мою думку, виглядає ще гірше. Як примітивний приклад:

<!-- Example 1 -->
<ul>
    <?php
        foreach ( $list_items as $list_item ) {
            echo "<li><a href='" . $list_item->url . "'>" . $list_item->name . "</a></li>";
        }
    ?>
</ul>

<!-- Example 2 -->
<ul>
    <?php foreach ( $list_items as $list_item ) : ?>
        <li>
            <a href="<?php echo $list_item->url; ?>">
                <?php echo $list_item->name; ?>
            </a>
        </li>
    <?php endforeach; ?>
</ul>

Чи є приклад 2 багатослівним? Можливо? Але простіше читати та редагувати, на мою думку. Ви можете уявити, як некрасиво це може отримати складний HTML.

Крім того, як зауваження: використання endforeachта endifнаписання HTML між вашою логікою PHP підвищує читабельність на тонну порівняно з }.


5
величезну перевагу }над endifпроте в тому , що (у багатьох редакторах) , ви можете легко побачити , де відкриття {є і , отже , все було закрито належним чином. Спробуйте розібратися в цьому endifі з цілою купою умовностей ...

2
foreach ( $list_items as $list_item ) printf( '<li><a href="%1$s">%2$s</a></li>', $list_item->url, $list_item->name );- два рядки, HTML і PHP добре розділені. : P
фуксія

4
@toscho: Ви зовсім пропустили справу. Ви все ще змішуєте PHP та HTML, люди, які вважають за краще другий стиль, роблять це, тому що ми хочемо уникати HTML у рядку PHP. Я використовую другий стиль при використанні PHP як мови шаблонів, оскільки це єдиний спосіб розумно вкласти суміш PHP та HTML, тоді як я використовую перший при використанні PHP як мови сценаріїв, оскільки зазвичай немає вагомих причин мати HTML у сценарії, коли ви відокремлюєте логіку програми від шаблону. Другий стиль був би ще кращим, якщо доступні короткі теги: <? ... ?>і <?= ... ?>.
Лі Лі Раян

1
@Piet: якщо у вас виникли проблеми зі збіганням брекетів, ви, мабуть, ніколи не чули про відступи? Крім того, ви повинні мати можливість налаштувати, щоб виділити відкриття endifбудь-яких гідних редакторів.
Лі Лі Раян


10

Йдеться про вибір між переглядом сторінки як:

  • як повністю створена PHP сутність
  • як шаблон HTML-документа, що працює на тегах шаблонів PHP

Різні люди схильні думати про це по-різному. Зауважте, що функції рідко використовують цей стиль, оскільки вони більше схожі на блок чистого PHP. З іншого боку, це не рідкість у шаблонах, оскільки вони більше розповсюджені по файлах, а кількість чистого HTML може бути легко більше, ніж у PHP в них.

Якщо ви подивитеся на шаблонні двигуни (вуса, гілочки тощо) - вони дуже схожі на цей стиль, за винятком того, що їх синтаксис має тенденцію до усунення багатослівності простого PHP.

PS Хочу зазначити, що я кажу про розумне вбудовування PHP в HTML, а не про буквальне відкриття та закінчення тегів у кожному рядку лише заради цього.


2

Моє запитання: чому? Навіщо включати всі ці додаткові теги?

Відповідь досить проста: Аудиторія. Коли люди (а не програмісти) захоплюють тему, FTPing встановлює їх, запускаючи 5-хвилинну установку тощо, вже відчуває себе програмуванням. Коли вони хочуть додати або змінити єдиний рядок будь-якої тематики, вони, можливо, вже зрозуміли, що таке HTML. PHP все ще буде далеко недоступним. Тому я здогадуюсь, що ідея цього полягає в тому, щоб дозволити легше додавати або видаляти елементи, не порушуючи нічого, коли вони помиляються.

Примітка. Це не те, що мені подобається, я вважаю за краще або рекомендував би. Я просто думаю, чому це відбувається.


0

Я виявив, що деякі нові програмісти навчаються саме так. Я проводжу 40-годинний курс на Lynda, і інструктор скидає теги PHP у кожен рядок, за винятком визначень функцій. Можливо, чітко провести межі між HTML та PHP, що, ймовірно, допомагає новим людям зрозуміти, де закінчується HTML і починається PHP. Після цього, ймовірно, це звичка. Я сам починав це дратувати і вирішив подивитися, чи хтось ще скаржиться.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.