Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

HTML в PHP Веб-разработка на PHP

Главный секрет PHP заключается в том, что сам язык — шаблонизатор. Если посмотреть на другой язык, в его файлах нельзя увидеть ничего похожего на теги <?php ... ?>.

В PHP любой файл с кодом — это шаблон. Причем этот шаблон не имеет структуры, как бывает в некоторых шаблонизаторах.

Мы можем создать PHP-файл, написать любой текст вне тегов <?php ?> и запустить код на выполнение. При этом он не упадет с указанием синтаксической ошибки.

Содержимое index.php:

hi
i am
the template

Запуск этого кода выведет весь текст на экран:

php index.php

hi
i am
the template

То же самое касается HTML, так как это всего лишь текст. Достаточно в любом PHP-файле добавить немного HTML и запустить его, как он будет выведен на экран:

Содержимое index.php:

<div>
  <a href="/lessons">Lessons</a>
</div>

Запуск этого кода выведет весь текст на экран:

php index.php

<div>
    <a href="/lessons">Lessons</a>
</div>

Такое поведение языка существует исключительно ради создания сайтов. Если запустить веб-сервер в директории с этим файлом index.php, то при обращении к этому сайту мы получим вывод как в терминале. Это значит, что мы можем заменить такой код:

<?php

echo '<p>hello, world</p>';

На такой:

<p>hello, world</p>

Отсюда следует важный вывод. Любой PHP-файл – это обычный текстовый файл со вставками PHP-кода с помощью тегов <?php ?>. Любой текст, написанный внутри него, отдается в вывод как есть, будь то браузер или запуск в командной строке.

Теперь добавим немного PHP. Шаблон становится шаблоном, когда внутри него появляется подстановка данных. Принцип работы: в любом месте шаблона вставляются теги <?php ?>, внутри которых можно написать код. Фактически мы имеем дело с обычной строковой интерполяцией:

<div>
  <a href="/lessons"><?php echo 'Lessons'; ?></a>
</div>

Добавим немного программирования. Запуск следующего кода вернет такой же результат, что и код выше:

<?php
$name = 'Lessons';
?>

<div>
  <a href="/lessons"><?php echo $name; ?></a>
</div>

В этом примере мы добавили один блок сверху файла, внутри которого создали переменную. Затем мы использовали ее в другой вставке.

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

<?php
$name = 'Lessons';
$id = 23;
?>

<div>
  <a href="/lessons/<?php echo $id; ?>"><?php echo $name; ?></a>
</div>

Вывод на экран после запуска:

php index.php

<div>
  <a href="/lessons/23">Lessons</a>
</div>

Для удобства вставки кода в HTML PHP предлагает альтернативный синтаксис для стандартных конструкций языка. Например, для вставки значения используется сокращенная версия тега начала PHP-кода: <?= <код на php> ?>. Она отличается от полной тем, что вместо <?php echo ... используется <?= ....

Сокращенная вставка

<?php
$name = 'Lessons';
?>

<div>
  <a href="/lessons/<?= 23 ?>"><?= $name ?></a>
</div>

If

<?php if ($a === 5) : ?>
  A is equal to 5
<?php endif; ?>

Switch

<?php switch ($foo) : ?>
<?php case 1: ?>
    ...
<?php endswitch; ?>

Foreach

<ul>
    <?php foreach ($users as $user) : ?>
        <li><?= $user->getName() ?></li>
    <?php endforeach; ?>
</ul>

С одной стороны поддержка CGI внутри самого языка позволяет начать делать сайт «на коленке» без особых знаний программирования и HTTP, что многие и делают. С другой — PHP толкает к созданию не поддерживаемого кода, который не может никто прочитать кроме автора.

Посмотрите сами:

<!DOCTYPE html>
<html>
<head>
  <title>Upload your files</title>
</head>
<body>
  <form enctype="multipart/form-data" action="upload.php" method="POST">
    <p>Upload your file</p>
    <input type="file" name="uploaded_file"></input><br />
    <input type="submit" value="Upload"></input>
  </form>
</body>
</html>

<?php
  if (!empty($_FILES['uploaded_file'])) {
    $path = "uploads/";
    $path = $path . basename( $_FILES['uploaded_file']['name']);
    if (move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $path)) {
        echo "The file " .  basename( $_FILES['uploaded_file']['name']) . " has been uploaded";
    } else{
        echo "There was an error uploading the file, please try again!";
    }
  }

Такой способ программирования возможен только в PHP, потому что только PHP это сразу и язык, и шаблонизатор, и CGI-скрипт. При таком способе организации кода сайт быстро начинает представлять из себя мешанину HTML и PHP.

Если количество разных страниц сайта достигнет хотя бы десятка, то поддержка уже станет намного сложнее. Безопасность такой шаблонизации находится на нуле (см. XSS).

Также PHP не поддерживает макеты — специализированные шаблоны, содержащие обвязку сайта, в которую вставляется HTML конкретного обработчика.

По этой причине в PHP используют шаблонизаторы, написанные на самом PHP. Наиболее популярные среди них Blade и Twig. Также рекомендуем шаблоны на основе Slim, но в PHP они не так популярны, как в JS или Ruby.

Шаблонизаторы будут одной из тем следующих уроков.


Самостоятельная работа

  1. Добавьте в index.php заголовок <h1>hello, php!</h1> вне PHP-кода.
  2. Добавьте в index.php заголовок <h1>i am from PHP!</h1> внутри PHP-кода через echo.

Дополнительные материалы

  1. Альтернативный синтаксис управляющих конструкций

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

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

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 23 мая

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»