Раздели сайт на переиспользуемые файлы с помощью include и require, наведи порядок в структуре проекта и собери константы в одном месте.
Открыть этот урок в KodokonКак только сайт вырастает больше чем на две страницы, дублировать шапку, подвал и функции в каждом файле становится невыносимо. PHP даёт четыре инструкции подключения: include, require и их варианты include_once / require_once. Все они вставляют содержимое файла в точку вызова; разница - в обработке ошибок и в повторных подключениях. Варианты _once запоминают уже загруженные файлы и подключают их только один раз - это обязательно для файлов с функциями, которые нельзя объявить дважды.
<?php
declare(strict_types=1);
function e(string $value): string
{
return htmlspecialchars($value, ENT_QUOTES);
}
function formatPrice(float $amount): string
{
return number_format($amount, 2, '.', ',') . ' €';
}Понятная структура проекта стоит тысячи комментариев. Распространённое соглашение: в public/ лежат страницы, которые отдаются браузеру (это единственная открытая наружу папка), в src/ собраны конфигурация и функции, в templates/ - фрагменты страниц (header.php, footer.php). Встроенный сервер разработки PHP запускают, указав ему на public/.
mkdir -p my-site/public my-site/src
mkdir -p my-site/templates
cd my-site
php -S localhost:8000 -t publicНеизменные значения проекта (название сайта, пути, настройки) заслуживают констант, а не переменных: их нельзя случайно перезаписать. const разрешается на этапе компиляции, define() - во время выполнения; на практике в файлах конфигурации лучше const. Для путей всегда добавляй в начало __DIR__ - папку текущего файла: тогда подключения сработают, откуда бы ни запускался скрипт.
<?php
declare(strict_types=1);
const SITE_NAME = 'La Bonne Pizza';
const ITEMS_PER_PAGE = 12;
const UPLOAD_DIR = __DIR__ . '/../public/uploads';
define('BASE_URL', 'http://localhost:8000');После этого каждая страница превращается в короткую сборку: подключаешь конфигурацию и функции через require, а затем оборачиваешь свой контент шаблонами.
<?php
require __DIR__ . '/../src/config.php';
require_once __DIR__ . '/../src/functions.php';
$pageTitle = SITE_NAME . ' - Home';
include __DIR__ . '/../templates/header.php';
?>
<main>
<h1><?= e($pageTitle) ?></h1>
<p>Pizza of the day: <?= formatPrice(9.5) ?></p>
</main>
<?php include __DIR__ . '/../templates/footer.php'; ?>