1. Введение в PHP

Что такое PHP?
Заголовок раздела «Что такое PHP?»PHP (Hypertext Preprocessor) — это серверный язык программирования, который был создан специально для веб-разработки. В отличие от HTML и CSS, которые работают в браузере, PHP выполняется на сервере и генерирует HTML-код, который затем отправляется пользователю.
Почему PHP?
Заголовок раздела «Почему PHP?»PHP остается одним из самых популярных языков для веб-разработки по нескольким причинам:
- Простота изучения: Синтаксис PHP понятен даже новичкам
- Огромное сообщество: Миллионы разработчиков, тонны документации и готовых решений
- WordPress, Drupal, Laravel: Большинство популярных CMS и фреймворков написаны на PHP
- Бесплатный и открытый: PHP распространяется бесплатно
- Кроссплатформенность: Работает на Windows, Linux, macOS
- Встроенная работа с базами данных: Легко интегрируется с MySQL, PostgreSQL и другими БД
Где используется PHP?
Заголовок раздела «Где используется PHP?»PHP используется для создания:
- Динамических сайтов: Контент генерируется “на лету” из базы данных
- CMS (системы управления контентом): WordPress, Joomla, Drupal
- Интернет-магазинов: WooCommerce, Magento, OpenCart
- REST API: Для мобильных приложений и SPA
- Веб-приложений: Соцсети, форумы, системы управления
- Скриптов автоматизации: Обработка данных, парсинг, крон-задачи
История PHP
Заголовок раздела «История PHP»PHP был создан Расмусом Лердорфом (Rasmus Lerdorf) в 1994 году как набор CGI-скриптов для отслеживания посещений его онлайн-резюме. Изначально это был “Personal Home Page Tools”.
Эволюция версий:
- 1995: PHP/FI (Forms Interpreter) — первая публичная версия
- 1998: PHP 3 — переписан с нуля, стал популярным
- 2000: PHP 4 — движок Zend Engine, улучшенная производительность
- 2004: PHP 5 — объектно-ориентированное программирование (ООП)
- 2015: PHP 7 — в 2 раза быстрее, строгая типизация
- 2020: PHP 8.0 — JIT-компиляция, union types, атрибуты
- 2021: PHP 8.1 — enums, readonly свойства, fibers
- 2022: PHP 8.2 — readonly классы, DNF types
- 2023: PHP 8.3 — typed константы, json_validate
- 2024: PHP 8.4 — property hooks, asymmetric visibility
На момент написания этого курса актуальная версия — PHP 8.3/8.4.
Как работает PHP?
Заголовок раздела «Как работает PHP?»Давайте разберемся, что происходит когда пользователь открывает PHP-страницу:
1. Пользователь вводит адрес в браузере: https://example.com/page.php ↓2. Браузер отправляет HTTP-запрос на сервер ↓3. Веб-сервер (Apache/Nginx) получает запрос ↓4. Сервер видит расширение .php и передает файл интерпретатору PHP ↓5. PHP обрабатывает код: выполняет логику, обращается к БД ↓6. PHP генерирует HTML-код ↓7. HTML отправляется обратно веб-серверу ↓8. Сервер отправляет HTML в браузер пользователя ↓9. Браузер отображает готовую страницу```text
**Важно:** Пользователь никогда не видит PHP-код — только результат его работы (HTML).
## Первый пример PHP
Давайте посмотрим на простейший PHP-скрипт:
```php<?php// Это комментарий - строка, которую PHP игнорирует
// Выводим текст на экранecho "Привет, мир!";
// Можно использовать HTML внутри PHPecho "<h1>Добро пожаловать на наш сайт!</h1>";echo "<p>Сегодня отличный день для изучения PHP!</p>";?>```text
**Что здесь происходит:**
- `<?php` — открывающий тег PHP (сообщает серверу, что дальше идет код PHP)- `echo` — команда для вывода текста- `?>` — закрывающий тег PHP (необязателен в конце файла)- `//` — однострочный комментарий
### PHP с HTML
PHP отлично интегрируется с HTML:
```php<!DOCTYPE html><html lang="ru"><head> <meta charset="UTF-8"> <title>Моя первая PHP-страница</title></head><body> <h1>Динамическое приветствие</h1>
<?php // PHP-код можно вставлять прямо в HTML $name = "Александр"; $hour = date("H"); // Получаем текущий час
if ($hour < 12) { echo "<p>Доброе утро, $name!</p>"; } elseif ($hour < 18) { echo "<p>Добрый день, $name!</p>"; } else { echo "<p>Добрый вечер, $name!</p>"; }
echo "<p>Сейчас " . date("d.m.Y H:i") . "</p>"; ?>
<p>Это обычный HTML, который не обрабатывается PHP.</p></body></html>```text
## PHP vs JavaScript: В чем разница?
Многие новички путают PHP и JavaScript. Вот ключевые отличия:
| Характеристика | PHP | JavaScript ||----------------|-----|------------|| **Где выполняется** | На сервере | В браузере (+ Node.js на сервере) || **Когда выполняется** | До отправки страницы | После загрузки страницы || **Доступ к БД** | Прямой | Только через API || **Видимость кода** | Скрыт от пользователя | Виден в исходном коде || **Основное применение** | Серверная логика, БД | Интерактивность, анимации |
**Простая аналогия:**- **PHP** — это повар на кухне (сервере), который готовит блюдо- **JavaScript** — это приправы, которые гость добавляет за столом (в браузере)
Пользователь никогда не видит, как повар готовил блюдо (PHP-код), но может добавить соль/перец по вкусу (JavaScript).
## Что можно делать с PHP?
### 1. Динамический контент
```php<?php$products = [ "Ноутбук", "Смартфон", "Планшет", "Наушники"];
echo "<h2>Наши товары:</h2>";echo "<ul>";
foreach ($products as $product) { echo "<li>$product</li>";}
echo "</ul>";?>```text
### 2. Работа с формами
```php<?php// Обработка данных из формыif ($_SERVER["REQUEST_METHOD"] == "POST") { $username = $_POST["username"]; $email = $_POST["email"];
echo "<p>Спасибо за регистрацию, $username!</p>"; echo "<p>Мы отправили письмо на $email</p>";}?>
<form method="POST"> <input type="text" name="username" placeholder="Ваше имя" required> <input type="email" name="email" placeholder="Email" required> <button type="submit">Зарегистрироваться</button></form>```text
### 3. Работа с базами данных
```php<?php// Подключение к MySQL$mysqli = new mysqli("localhost", "user", "password", "database");
// Получение данных$result = $mysqli->query("SELECT title, content FROM posts ORDER BY created_at DESC LIMIT 5");
echo "<h2>Последние статьи:</h2>";
while ($row = $result->fetch_assoc()) { echo "<article>"; echo "<h3>" . htmlspecialchars($row["title"]) . "</h3>"; echo "<p>" . htmlspecialchars($row["content"]) . "</p>"; echo "</article>";}?>```text
### 4. Работа с файлами
```php<?php// Чтение файла$content = file_get_contents("data.txt");echo "<pre>$content</pre>";
// Запись в файл$text = "Новая строка\n";file_put_contents("log.txt", $text, FILE_APPEND);
// Проверка существования файлаif (file_exists("config.php")) { require_once "config.php";}?>```text
### 5. Сессии и аутентификация
```php<?phpsession_start();
// Проверка авторизацииif (!isset($_SESSION["user_id"])) { header("Location: login.php"); exit;}
echo "Добро пожаловать, " . $_SESSION["username"];?>```text
## WordPress и PHP
WordPress — самая популярная CMS в мире (более 40% всех сайтов) — полностью написан на PHP. Знание PHP критически важно для:
- **Разработки тем**: Создание уникального дизайна- **Разработки плагинов**: Добавление функциональности- **Кастомизации**: Изменение поведения WordPress- **Оптимизации**: Ускорение сайта- **Интеграций**: Подключение внешних сервисов
### Простой пример WordPress
```php<?php/** * Template Name: Кастомная страница */get_header();?>
<main> <h1><?php the_title(); ?></h1>
<?php // Получаем последние 5 постов $args = array( 'posts_per_page' => 5, 'post_type' => 'post' );
$recent_posts = new WP_Query($args);
if ($recent_posts->have_posts()) { echo '<div class="recent-posts">';
while ($recent_posts->have_posts()) { $recent_posts->the_post(); ?> <article> <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <div class="excerpt"><?php the_excerpt(); ?></div> </article> <?php }
echo '</div>'; wp_reset_postdata(); } ?></main>
<?php get_footer(); ?>```text
## Что нужно для работы с PHP?
Для разработки на PHP вам понадобится:
### 1. Локальный сервер
Выберите один из вариантов:
- **XAMPP** (Windows/Mac/Linux) — Apache + MySQL + PHP- **OpenServer** (Windows) — популярен в России- **MAMP** (Mac) — простой и удобный- **Laragon** (Windows) — современный и быстрый- **Docker** — для продвинутых (изолированные контейнеры)
### 2. Редактор кода
Рекомендуемые редакторы:
- **VS Code** — бесплатный, с плагинами для PHP- **PhpStorm** — профессиональная IDE (платная, но есть trial)- **Sublime Text** — легкий и быстрый- **Notepad++** — простой вариант для Windows
### 3. Онлайн-редакторы (для быстрых тестов)
- **PHPSandbox** (https://phpsandbox.io/) — полнофункциональный онлайн PHP- **3v4l** (https://3v4l.org/) — тестирование на разных версиях PHP- **OnlineGDB** — простой онлайн-компилятор
**Важно:** PHP требует серверного окружения, поэтому просто открыть .php файл в браузере не получится — нужен веб-сервер с установленным PHP.
## Структура PHP-файла
Типичная структура PHP-файла:
```php<?php/** * Описание файла * * @author Ваше имя * @version 1.0 */
// 1. Настройки и константыdefine('DB_HOST', 'localhost');define('DB_USER', 'root');
// 2. Подключение зависимостейrequire_once 'config.php';require_once 'functions.php';
// 3. Инициализацияsession_start();
// 4. Логика приложения$user_id = $_SESSION['user_id'] ?? null;
if ($user_id) { $user = getUserById($user_id);} else { header('Location: login.php'); exit;}
// 5. HTML-вывод?><!DOCTYPE html><html lang="ru"><head> <meta charset="UTF-8"> <title><?php echo htmlspecialchars($user['name']); ?> - Профиль</title></head><body> <h1>Привет, <?php echo htmlspecialchars($user['name']); ?>!</h1> <p>Email: <?php echo htmlspecialchars($user['email']); ?></p></body></html>```text
## Стандарты кодирования (PSR)
PHP-сообщество разработало стандарты PSR (PHP Standards Recommendations):
### PSR-1: Базовые стандарты кодирования
```php<?php// ✅ Правильноnamespace MyProject;
class UserController{ const VERSION = '1.0';
public function getUserName() { return $this->name; }}
// ❌ Неправильноclass user_controller // Имена классов должны быть в PascalCase{ function get_user_name() // Методы должны быть в camelCase { return $this->name; }}```text
### PSR-12: Расширенный стиль кодирования
```php<?php// ✅ Правильноnamespace App\Controllers;
use App\Models\User;use App\Services\EmailService;
class UserController{ private EmailService $emailService;
public function __construct(EmailService $emailService) { $this->emailService = $emailService; }
public function register(string $email, string $password): bool { // 4 пробела для отступов (не табы) if (strlen($password) < 8) { return false; }
$user = new User(); $user->email = $email; $user->password = password_hash($password, PASSWORD_DEFAULT);
return $user->save(); }}```text
## Безопасность с первого дня
PHP имеет плохую репутацию в плане безопасности, но проблема не в языке, а в неправильном его использовании. С самого начала привыкайте к правильным практикам:
### 1. Всегда экранируйте вывод
```php<?php// ❌ ОПАСНО: XSS-атака$name = $_GET['name'];echo "Привет, $name!";
// ✅ БЕЗОПАСНО$name = $_GET['name'];echo "Привет, " . htmlspecialchars($name, ENT_QUOTES, 'UTF-8') . "!";?>```text
### 2. Используйте prepared statements для БД
```php<?php// ❌ ОПАСНО: SQL-инъекция$id = $_GET['id'];$query = "SELECT * FROM users WHERE id = $id";
// ✅ БЕЗОПАСНО$id = $_GET['id'];$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");$stmt->execute([$id]);?>```text
### 3. Валидируйте входные данные
```php<?php// ✅ Всегда проверяйте данные$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
if ($email === false) { die("Некорректный email");}
$age = filter_input(INPUT_POST, 'age', FILTER_VALIDATE_INT);
if ($age === false || $age < 18) { die("Возраст должен быть числом >= 18");}?>```text
## Практика
Чтобы закрепить материал, выполните следующие задания:
### Задание 1: Hello, World!
Создайте файл `hello.php` и выведите "Привет, мир!" с помощью `echo`.
### Задание 2: Динамическое приветствие
Создайте скрипт, который выводит разное приветствие в зависимости от времени суток (используйте функцию `date("H")`).
### Задание 3: PHP + HTML
Создайте HTML-страницу с заголовком, абзацем и списком. Список должен генерироваться PHP-кодом из массива (минимум 5 элементов).
### Задание 4: Простая форма
Создайте форму с двумя полями (имя и email). При отправке формы выведите введенные данные на экране с помощью PHP.
### Задание 5: Эксперименты
Попробуйте разные команды PHP:- `echo` vs `print`- `phpinfo()` — посмотрите информацию о вашей установке PHP- `var_dump()` — вывод информации о переменной
## Онлайн-редакторы для практики
Пока у вас нет локального сервера, используйте онлайн-редакторы:
- **PHPSandbox** (https://phpsandbox.io/) — полноценная PHP-среда в браузере, поддерживает файлы, базы данных, composer- **3v4l** (https://3v4l.org/) — отличный инструмент для проверки кода на разных версиях PHP (от 4.3 до 8.4)- **PHP Fiddle** (http://phpfiddle.org/) — быстрое тестирование небольших скриптов
**Совет:** Скопируйте примеры из этого урока в онлайн-редактор и поэкспериментируйте с ними!
## Полезные ресурсы
### Официальная документация
- **php.net** — официальная документация PHP (есть на русском)- **php.net/manual/ru/** — русская версия мануала
### Сообщества
- **Stack Overflow** — вопросы и ответы по PHP- **Reddit r/PHP** — новости и обсуждения- **Habr** — статьи на русском языке- **PHP.ru** — русскоязычное сообщество
### YouTube-каналы
- **Traversy Media** — качественные туториалы (English)- **The Net Ninja** — серия уроков по PHP- **Гоша Дударь** — уроки на русском
## Итоги
В этом уроке вы узнали:
✅ **Что такое PHP** и для чего он нужен✅ **Как работает PHP** на сервере✅ **Отличия PHP от JavaScript**✅ **Базовый синтаксис** и первые примеры✅ **Где применяется PHP** (WordPress, Laravel, API)✅ **Основы безопасности** с первого дня✅ **Инструменты разработки** и онлайн-редакторы
### Следующий шаг
В следующем уроке мы установим локальный сервер и настроим рабочее окружение для комфортной разработки на PHP.
### Ключевые моменты
1. **PHP выполняется на сервере** — пользователь видит только результат2. **PHP отлично интегрируется с HTML** — можно смешивать код3. **Безопасность важна с самого начала** — всегда экранируйте вывод и данные4. **WordPress работает на PHP** — знание PHP открывает огромные возможности5. **PHP живой и развивается** — современный PHP (8.x) это быстрый и мощный язык
**Помните:** Каждый эксперт когда-то был новичком. Не бойтесь ошибок — именно на них вы учитесь!
---
**Готовы двигаться дальше?** Переходите к следующему уроку: [Установка PHP](/php/installation/)