PHP
Шпаргалка по PHP: синтаксис, переменные и типы, строки, массивы, условия, циклы, функции, ООП, PDO, формы и Composer с примерами.
PHP — серверный язык для веб-разработки. На нём работают WordPress, Laravel, Symfony и миллионы сайтов. Код встраивается в HTML, исполняется на сервере и отдаёт браузеру готовую разметку. Эта шпаргалка собирает основные конструкции языка с короткими рабочими примерами.
Синтаксис и теги
PHP-код размещается между тегами <?php и ?>. Всё, что вне тегов, выводится как обычный текст. Инструкции разделяются точкой с запятой. Вывод — через echo или print.
<?php
echo "Привет, мир!"; // Привет, мир!
// Однострочный комментарий
# Тоже однострочный
/* Многострочный
комментарий */
?>
<p>Обычный HTML вне тегов PHP</p>
Если файл содержит только PHP-код, закрывающий тег ?> в конце лучше не ставить — это устраняет случайные пробелы в выводе.
Переменные и типы
Имя переменной начинается с $. Объявлять тип заранее не нужно — PHP определяет его сам по значению. Основные типы: int, float, string, bool, array, null, object.
<?php
$name = "Аня"; // строка
$age = 25; // целое
$price = 19.99; // дробное
$active = true; // логическое
$empty = null; // null
var_dump($age); // int(25)
echo gettype($price); // double
Проверить и привести тип помогают функции is_int(), is_string(), (int), (string).
<?php
$x = "42";
$n = (int) $x; // 42 (число)
var_dump(is_int($n)); // bool(true)
Строки
Строки заключают в одинарные или двойные кавычки. В двойных кавычках переменные подставляются в текст, в одинарных — нет. Конкатенация (склейка строк) выполняется точкой ..
<?php
$name = "Аня";
echo "Привет, $name!"; // Привет, Аня!
echo 'Привет, $name!'; // Привет, $name!
echo "Привет, " . $name; // Привет, Аня
Полезные функции для работы со строками:
<?php
echo strlen("hello"); // 5
echo strtoupper("php"); // PHP
echo str_replace("a", "o", "cat"); // cot
echo trim(" пробелы "); // пробелы
echo substr("PHP-код", 0, 3); // PHP
Массивы
Массив хранит набор значений. Индексные массивы используют числовые ключи от 0, ассоциативные — строковые ключи.
<?php
// Индексный массив
$fruits = ["яблоко", "банан", "вишня"];
echo $fruits[1]; // банан
$fruits[] = "груша"; // добавить в конец
// Ассоциативный массив
$user = ["name" => "Аня", "age" => 25];
echo $user["name"]; // Аня
echo count($fruits); // 4
Частые операции с массивами:
<?php
$nums = [3, 1, 2];
sort($nums); // [1, 2, 3]
$sum = array_sum($nums); // 6
in_array(2, $nums); // true
$keys = array_keys(["a" => 1, "b" => 2]); // ["a", "b"]
Операторы
Арифметические: + - * / % **. Сравнения: == === != !== < > <= >=. Важно различать == (равны по значению) и === (равны по значению и типу).
<?php
var_dump(5 == "5"); // bool(true) — значения равны
var_dump(5 === "5"); // bool(false) — разные типы
echo 2 ** 3; // 8
echo 7 % 3; // 1
Логические &&, ||, !, тернарный оператор и оператор объединения с null:
<?php
$age = 20;
$status = $age >= 18 ? "взрослый" : "ребёнок";
echo $status; // взрослый
$name = $input ?? "Гость"; // если $input не задан → "Гость"
Условия: if, switch, match
Ветвление через if / elseif / else. Для выбора по значению удобны switch и современный match (с PHP 8, сравнивает строго через ===).
<?php
$score = 75;
if ($score >= 90) {
echo "Отлично";
} elseif ($score >= 60) {
echo "Норма"; // выведется это
} else {
echo "Плохо";
}
<?php
$day = 3;
$name = match($day) {
1, 2, 3, 4, 5 => "Будни",
6, 7 => "Выходные",
default => "?",
};
echo $name; // Будни
Циклы: for, foreach, while
for — когда известно число итераций. foreach — для перебора массивов. while — пока условие истинно.
<?php
for ($i = 1; $i <= 3; $i++) {
echo $i; // 123
}
<?php
$user = ["name" => "Аня", "age" => 25];
foreach ($user as $key => $value) {
echo "$key: $value\n";
}
// name: Аня
// age: 25
<?php
$n = 3;
while ($n > 0) {
echo $n;
$n--;
} // 321
Управление циклом: break — выйти, continue — пропустить итерацию.
Функции
Функция объявляется ключевым словом function. Можно указывать типы аргументов и возвращаемого значения, а также значения по умолчанию.
<?php
function greet(string $name): string {
return "Привет, $name!";
}
echo greet("Аня"); // Привет, Аня!
function sum(int $a, int $b = 10): int {
return $a + $b;
}
echo sum(5); // 15
echo sum(5, 3); // 8
Стрелочные функции (fn) — короткая запись, автоматически видят переменные из внешней области:
<?php
$nums = [1, 2, 3];
$doubled = array_map(fn($x) => $x * 2, $nums);
print_r($doubled); // [2, 4, 6]
$factor = 3;
$triple = fn($x) => $x * $factor; // factor виден автоматически
echo $triple(4); // 12
Суперглобальные переменные
Это встроенные массивы, доступные везде. $_GET и $_POST хранят данные запроса, $_SESSION — данные сессии, $_SERVER — информацию о сервере.
<?php
// Адрес: page.php?id=42
$id = $_GET["id"] ?? null; // "42"
$method = $_SERVER["REQUEST_METHOD"]; // GET или POST
session_start();
$_SESSION["user"] = "Аня"; // сохранить в сессию
echo $_SESSION["user"]; // Аня
Данные из $_GET и $_POST всегда нужно проверять и экранировать — это ввод от пользователя.
Работа с формами
HTML-форма с методом POST отправляет данные на сервер. В PHP их читают из $_POST. Перед выводом значения экранируют через htmlspecialchars(), чтобы защититься от XSS.
<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$email = trim($_POST["email"] ?? "");
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Email: " . htmlspecialchars($email);
} else {
echo "Неверный email";
}
}
?>
<form method="post">
<input type="email" name="email">
<button>Отправить</button>
</form>
ООП: классы и объекты
Класс — это шаблон. Объект — экземпляр класса, создаётся через new. Свойства и методы доступа: public, protected, private. Конструктор — метод __construct.
<?php
class User {
public function __construct(
public string $name,
private int $age
) {}
public function greet(): string {
return "Я {$this->name}";
}
}
$u = new User("Аня", 25);
echo $u->name; // Аня
echo $u->greet(); // Я Аня
Наследование
Класс-наследник расширяет родителя через extends и может переопределять методы.
<?php
class Animal {
public function sound(): string { return "..."; }
}
class Dog extends Animal {
public function sound(): string { return "Гав"; }
}
echo (new Dog())->sound(); // Гав
Интерфейсы и трейты
Интерфейс задаёт набор методов, которые класс обязан реализовать (implements). Трейт — переиспользуемый набор методов, подключаемый через use.
<?php
interface Speaker {
public function say(): string;
}
trait Logger {
public function log(string $m): void {
echo "LOG: $m";
}
}
class Bot implements Speaker {
use Logger;
public function say(): string { return "Бип"; }
}
$b = new Bot();
echo $b->say(); // Бип
$b->log("ok"); // LOG: ok
Обработка ошибок
Опасный код оборачивают в try, ошибки ловят в catch. Блок finally выполняется всегда. Свою ошибку создают через throw new Exception(...).
<?php
function divide($a, $b) {
if ($b === 0) {
throw new InvalidArgumentException("Деление на ноль");
}
return $a / $b;
}
try {
echo divide(10, 0);
} catch (InvalidArgumentException $e) {
echo "Ошибка: " . $e->getMessage();
} finally {
echo " (готово)";
}
// Ошибка: Деление на ноль (готово)
Работа с БД через PDO
PDO — единый интерфейс к разным базам данных. Главное правило: всегда используйте подготовленные запросы с параметрами — это защищает от SQL-инъекций.
<?php
$pdo = new PDO(
"mysql:host=localhost;dbname=shop;charset=utf8mb4",
"user",
"password"
);
// Безопасный запрос с параметром
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([42]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
echo $user["name"];
// Вставка
$stmt = $pdo->prepare("INSERT INTO users (name) VALUES (:name)");
$stmt->execute(["name" => "Аня"]);
Чтобы PDO выбрасывал исключения при ошибках, задайте режим: $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Composer кратко
Composer — менеджер зависимостей PHP. Он скачивает библиотеки и настраивает автозагрузку классов. Зависимости перечислены в файле composer.json.
<?php
// Установка пакета (в терминале):
// composer require guzzlehttp/guzzle
// Подключаем автозагрузчик один раз в начале:
require "vendor/autoload.php";
// Теперь классы из пакетов доступны:
use GuzzleHttp\Client;
$client = new Client();
Основные команды: composer install — поставить зависимости из composer.lock, composer update — обновить, composer require пакет — добавить новый. Папку vendor/ в git обычно не коммитят.