Открывающий тег в PHP: синтаксис и альтернативы

Раздел: Основы PHP -> Синтаксис PHP

Открывающий тег PHP (<?) указывает интерпретатору начало PHP-кода в файле. Без него код не будет выполнен, а будет отображен как текст. Существуют различные формы этого тега, каждая со своими особенностями.

Основные варианты открывающего тега PHP

Какой открывающий тег считается стандартным и наиболее совместимым?

Стандартный тег <? ... ?> является единственным надежным способом, гарантирующим работу на любом сервере с любой версией PHP. Он не требует дополнительных настроек в php.ini.

<? echo "Привет, мир!"; ?>

конструкции языка php (конструкции языка php)

Интерпретатор обрабатывает все, что находится между <? и ?>, как PHP-код. Вне этих тегов содержимое выводится без изменений.

Типичная ошибка: путаница с короткими тегами при переносе кода между серверами. Если код написан с использованием <?, а на целевом сервере short_open_tag выключен, то PHP не выполнится. Решение: всегда использовать <? для больших блоков кода.

Как вывести значение без использования echo?

Короткий тег <?= ... ?> позволяет сразу вывести результат выражения. Начиная с PHP 5.4, он доступен всегда и не зависит от настроек php.ini. Это синтаксический сахар для <? echo ... ?>.

<?= date("Y") ?>

Forums forums php list (вывод списка форумов через list())

Выведет текущий год. Тег можно использовать в любом месте HTML, например внутри атрибутов тегов.

Проблема: до PHP 5.4 <?= работал только при включенном short_open_tag. В современных версиях (5.4+) он всегда активен, но старый код может выдавать ошибку на устаревших серверах. Также ошибочно полагать, что <?= можно применять для многострочного кода - он подходит только для одного выражения.

Можно ли сократить <? до <? ?

Короткий тег <? ... ?> (без знака равенства) работает только при включенной директиве short_open_tag в php.ini. Используется редко из-за возможного конфликта с XML (<?xml ... ?>).

<? echo "Короткий стиль"; ?>

Php список значений (список значений в php)

Если short_open_tag = On, код выполнится и выведет строку.

Типичная ошибка: при выключенном short_open_tag код не выполняется, а выводится как текст, включая сам тег <? и последующий код. Решение: проверять настройки сервера или заменить все <? на <?.

Какие устаревшие формы открывающего тега существуют?

Ранее поддерживались ASP-теги <% ... %> и теги . Они были удалены в PHP 7.0. Их использование в современных версиях приведет к синтаксической ошибке или интерпретации как обычного текста.

<% echo "ASP стиль"; %>

В PHP 5.x такой код работал бы при включенном asp_tags. Начиная с PHP 7, это вызовет фатальную ошибку.

Проблема: попытка использовать устаревшие теги в новых проектах. Ошибка: 'Unexpected "<"' или даже белый экран. Решение: заменить все вхождения на <?.

Рекомендуется всегда использовать стандартный тег <? для основного кода, а для вывода значений - <?=.

Расширенные примеры использования открывающих тегов

Пример 1: стандартный тег с управляющими конструкциями

Пример
<?
$x = 5;
if ($x > 0) {
    echo "Положительное число: $x";
} else {
    echo "Не положительное";
}
?>
Положительное число: 5

Тег <? обрамляет целый блок кода, позволяя использовать любые конструкции PHP. Закрывающий тег ?> не обязателен в конце файла, если после него нет HTML.

Пример 2: короткий тег <?= в атрибуте HTML

Пример
<input type="text" value="<?= htmlspecialchars($name, ENT_QUOTES) ?>">
(выводит безопасное значение переменной $name)

Здесь <?= используется для вставки значения напрямую в атрибут. Функция htmlspecialchars защищает от XSS-атак.

Пример 3: короткий тег <? - риск при отключенном short_open_tag

Пример
<? $arr = [1,2,3]; foreach($arr as $v) echo $v; ?>

Если в php.ini short_open_tag = Off, этот код не будет выполнен. Вместо результата на странице отобразится строка:

<? $arr = [1,2,3]; foreach($arr as $v) echo $v; ?>

Это частая причина ошибок при переносе скриптов между серверами.

Пример 4: устаревший ASP-тег и реакция современных версий PHP

Пример
<% echo "Тест"; %>

При попытке выполнить такой код в PHP 7+ интерпретатор выдаст синтаксическую ошибку:

Parse error: syntax error, unexpected '<' in ...

Даже если файл сохранён с asp_tags=On (в PHP 5.x), в PHP 7 эта директива отсутствует. Код необходимо переписать на <?.

Пример 5: комбинирование <? и <?= в одном файле

Пример
<?php
$title = "Заголовок";
?>
<h1><?= $title ?></h1>

Заголовок

Стандартный тег используется для выполнения логики, а короткий - для вывода. Такой подход делает код чище.

Открывающий тег PHP - comments

En
Php open tag (php)