Главный секрет 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. Шаблонизаторы будут одной из тем следующих уроков.
<h1>hello, php!</h1>
вне PHP кода.<h1>i am from PHP!</h1>
внутри PHP кода через echo
.Вам ответят команда поддержки Хекслета или другие студенты.
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт