Перейти к содержимому

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

Иллюстрация к уроку

PHP (Hypertext Preprocessor) — это серверный язык программирования, который был создан специально для веб-разработки. В отличие от HTML и CSS, которые работают в браузере, PHP выполняется на сервере и генерирует HTML-код, который затем отправляется пользователю.

PHP остается одним из самых популярных языков для веб-разработки по нескольким причинам:

  • Простота изучения: Синтаксис PHP понятен даже новичкам
  • Огромное сообщество: Миллионы разработчиков, тонны документации и готовых решений
  • WordPress, Drupal, Laravel: Большинство популярных CMS и фреймворков написаны на PHP
  • Бесплатный и открытый: PHP распространяется бесплатно
  • Кроссплатформенность: Работает на Windows, Linux, macOS
  • Встроенная работа с базами данных: Легко интегрируется с MySQL, PostgreSQL и другими БД

PHP используется для создания:

  • Динамических сайтов: Контент генерируется “на лету” из базы данных
  • CMS (системы управления контентом): WordPress, Joomla, Drupal
  • Интернет-магазинов: WooCommerce, Magento, OpenCart
  • REST API: Для мобильных приложений и SPA
  • Веб-приложений: Соцсети, форумы, системы управления
  • Скриптов автоматизации: Обработка данных, парсинг, крон-задачи

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-страницу:

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 внутри PHP
echo "<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
<?php
session_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/)