Открывающий тег в PHP: синтаксис и альтернативы
Открывающий тег PHP (<?) указывает интерпретатору начало PHP-кода в файле. Без него код не будет выполнен, а будет отображен как текст. Существуют различные формы этого тега, каждая со своими особенностями.
Основные варианты открывающего тега PHP
Какой открывающий тег считается стандартным и наиболее совместимым?
Стандартный тег <? ... ?> является единственным надежным способом, гарантирующим работу на любом сервере с любой версией PHP. Он не требует дополнительных настроек в php.ini.
<? echo "Привет, мир!"; ?>конструкции языка php (конструкции языка php)
Интерпретатор обрабатывает все, что находится между <? и ?>, как PHP-код. Вне этих тегов содержимое выводится без изменений.
Как вывести значение без использования echo?
Короткий тег <?= ... ?> позволяет сразу вывести результат выражения. Начиная с PHP 5.4, он доступен всегда и не зависит от настроек php.ini. Это синтаксический сахар для <? echo ... ?>.
<?= date("Y") ?>Forums forums php list (вывод списка форумов через list())
Выведет текущий год. Тег можно использовать в любом месте HTML, например внутри атрибутов тегов.
Можно ли сократить <? до <? ?
Короткий тег <? ... ?> (без знака равенства) работает только при включенной директиве short_open_tag в php.ini. Используется редко из-за возможного конфликта с XML (<?xml ... ?>).
<? echo "Короткий стиль"; ?>Php список значений (список значений в php)
Если short_open_tag = On, код выполнится и выведет строку.
Какие устаревшие формы открывающего тега существуют?
Ранее поддерживались ASP-теги <% ... %> и теги . Они были удалены в PHP 7.0. Их использование в современных версиях приведет к синтаксической ошибке или интерпретации как обычного текста.
<% echo "ASP стиль"; %>
В PHP 5.x такой код работал бы при включенном asp_tags. Начиная с PHP 7, это вызовет фатальную ошибку.
Рекомендуется всегда использовать стандартный тег <? для основного кода, а для вывода значений - <?=.
Расширенные примеры использования открывающих тегов
Пример 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>
Заголовок
Стандартный тег используется для выполнения логики, а короткий - для вывода. Такой подход делает код чище.