Avatar ·

Можно ли использовать короткие теги PHP (short tags) в современных проектах?

Всем привет! Я начинающий PHP-разработчик, пишу свой первый сайт на чистом PHP. Увидел в старых уроках, что можно использовать короткие теги: ` ``` Вместо: ```php ``` Это выглядит очень удобно и сокращает код. Но я заметил, что на некоторых хостингах мой код с короткими тегами не работает, выдает ошибку. Также слышал, что это считается плохой практикой, но не понимаю почему — ведь код становится короче и чище. Подскажите, пожалуйста: 1. Почему короткие теги могут не работать? 2. Действительно ли их лучше не использовать в современных проектах? 3. Есть ли исключения, когда короткие теги допустимы? Заранее спасибо за помощь! <<>>

Короткие теги в PHP: полный разбор

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

Почему короткие теги могут не работать?

Существует два типа коротких тегов:

  • short_open_tag — управляет тегом . По умолчанию отключен в PHP 7.0+ и полностью удален в PHP 8.0+. То есть больше не работает вообще.
  • — сокращение для <?php echo. Работает всегда, начиная с PHP 5.4 (2012 год), независимо от настроек short_open_tag.

Почему стоит избегать (без "php")?

  1. Несовместимость: как сказано выше, в PHP 8 этот тег удален. Если вы используете , ваш код сломается на любом современном хостинге.
  2. Конфликт с XML: тег используется в XML для объявления . Интерпретатор PHP может перепутать.
  3. Проблемы с читаемостью: в больших проектах сложно отличить от обычного текста или других языков шаблонов (например, в Angular или в ASP).

А что насчет ?

Тег — это хорошая практика в современных проектах. Он:

  • Работает везде (PHP 5.4+).
  • Не конфликтует с XML (XML требует пробела после , а — это один токен).
  • Делает шаблоны (Views) чище, особенно в связке с HTML.

Когда что использовать?

Вот четкие рекомендации:

  • Всегда используйте для блоков логики (условия, циклы, функции).
  • Используйте только для вывода данных в шаблонах (например, <h1><?= $title ?></h1>).
  • Никогда не используйте (без "php" или "=") — это устаревшая и опасная практика.

Пример правильного подхода

<!-- Хорошо: блоки логики на полном теге -->
<?php
$users = ['Анна', 'Борис', 'Виктор'];
$isLoggedIn = true;
?>

<!-- Хорошо: вывод данных через короткий тег -->
<ul>
    <?php foreach ($users as $user): ?>
        <li><?= htmlspecialchars($user, ENT_QUOTES, 'UTF-8') ?></li>
    <?php endforeach; ?>
</ul>

<!-- ПЛОХО: так делать нельзя -->
<?= $isLoggedIn ? "Привет, $user!" : "Войдите" ?> <!-- Смешивание логики и вывода -->
<? echo "Устаревший стиль"; ?> <!-- Устарело -->

Итог

Используйте для кода и для вывода в шаблонах. Это обеспечит совместимость, читаемость и безопасность. Никогда не используйте голый .

<<>>

Дополнение: PSR-стандарты и альтернативный синтаксис

Если вы работаете в команде или по стандартам PSR (PHP-FIG), то PSR-1 рекомендует использовать только <?php и <?=. Это обеспечивает единообразие кода.

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

<?php if ($condition): ?>
    <p><?= $message ?></p>
<?php endif; ?>

<?php foreach ($items as $item): ?>
    <div><?= $item->name ?></div>
<?php endforeach; ?>

Этот стиль очень популярен в шаблонизаторах (например, в Laravel Blade или чистом PHP-шаблонах). Он сохраняет читаемость HTML и не требует фигурных скобок.

Еще один совет: если вы хотите полностью избежать путаницы с тегами — используйте чистый шаблонизатор (Twig, Blade, Smarty). Они имеют свой синтаксис (например, {{ $var }}) и полностью отделяют логику от представления. Но для простых проектов связка <?php + <?= — идеальный выбор.