index.php и require — точка входа и подключение
PHP-файл выполняется сверху вниз при каждом HTTP-запросе или запуске php script.php. Аналог Python if __name__ == "__main__": — разделение ролей: один entrypoint (public/index.php, artisan, CLI-скрипт) и подключаемые файлы только с функциями и классами.
См. также: Первая программа · Composer и автозагрузка · Python — __name__.
Проблема "всё в одном файле"
<?php
function add(int $a, int $b): int {
return $a + $b;
}
echo add(5, 3); // выполнится при каждом require!
Файл require 'calculator.php' из другого скрипта тоже выведет 8.
Подключаемый файл без побочных эффектов
<?php
// src/Calculator.php — только определения
function calculator_add(int $a, int $b): int {
return $a + $b;
}
<?php
// bin/demo.php — точка входа CLI
require __DIR__ . '/../src/Calculator.php';
echo calculator_add(5, 3);
Запуск: php bin/demo.php. Подключение Calculator.php из веб-приложения не печатает демо.
Веб — public/index.php
Современные проекты (Laravel, Symfony) направляют все запросы в один front controller:
public/
index.php ← единственная точка входа HTTP
src/
… ← классы, подключаются автозагрузчиком
Nginx/Apache отдаёт только public/. Остальные .php не должны быть доступны по URL — иначе их можно вызвать напрямую с побочным кодом. Пример конфига nginx + PHP-FPM — Nginx — конфиги под задачу.
CLI и проверка SAPI
Для скрипта, который иногда подключают, иногда запускают:
<?php
function add(int $a, int $b): int {
return $a + $b;
}
if (php_sapi_name() === 'cli' && basename(__FILE__) === basename($_SERVER['argv'][0] ?? '')) {
echo add(5, 3);
}
На практике проще два файла: библиотека + bin/ скрипт — как в Python с отдельным main.py.
require_once и автозагрузка
| Механизм | Назначение |
|---|---|
require / include | Подключить файл (ошибка, если нет) |
require_once | Подключить один раз |
| Composer PSR-4 | Классы без ручного require |
Файлы с классами не должны выводить HTML или запускать БД при загрузке — только объявления.
Сравнение с Python
| Python | PHP |
|---|---|
if __name__ == "__main__": | Отдельный index.php / bin/ + "чистые" include |
import module | require / autoload class |
| Код верхнего уровня при import | Выполняется при каждом include |
Дальше по разделу
| Тема | Статья |
|---|---|
| Первая программа | Первая программа на PHP — Первая программа |
| Composer | Composer - управление зависимостями в PHP — Composer |
| Laravel entry | Первая программа на Laravel — Laravel |