LEARN X · ЗА 15 МИН
PHP
PHP за 15 минут: синтаксис, типы, строки, массивы, функции, ООП, исключения, формы, PDO и JSON — весь язык на одной странице через примеры кода.
PHP — серверный язык для веба: динамическая типизация, встроенная работа с HTTP и БД. Весь язык на одной странице — всё объяснено прямо в комментариях к коду.
1. Теги и вывод
PHP-код живёт внутри тегов; всё снаружи отправляется как обычный текст.
<?php
// Однострочный комментарий
# Тоже однострочный
/* Многострочный
комментарий */
// echo выводит одну или несколько строк (это языковая конструкция, не функция)
echo "Привет"; // Привет
echo "a", "b", "c"; // abc
// print тоже выводит, но возвращает 1 (его можно использовать в выражении)
print "Мир\n"; // Мир
// printf — форматированный вывод
printf("%d + %d = %d\n", 2, 3, 5); // 2 + 3 = 5
?>
<!-- Этот HTML вне тегов уйдёт в браузер как есть -->
<?php echo "снова PHP"; ?>
2. Переменные и типы
Переменные начинаются с $, тип определяется значением.
<?php
$int = 42; // int
$float = 3.14; // float
$bool = true; // bool (true / false)
$string = "текст"; // string
$null = null; // null — отсутствие значения
$arr = [1, 2, 3]; // array
// Узнать тип и содержимое
var_dump($int); // int(42)
var_dump($bool); // bool(true)
echo gettype($float); // double
// Проверки типа
var_dump(is_int($int)); // bool(true)
var_dump(is_string($int));// bool(false)
// Приведение типов
$n = (int) "123abc"; // 123
$s = (string) 99; // "99"
// Константы (не меняются)
const PI = 3.14159;
define("SITE", "codechick");
echo PI, SITE;
?>
3. Строки
Двойные кавычки понимают спецсимволы и подставляют переменные, одинарные — нет.
<?php
$name = "Аня";
// Одинарные кавычки — без интерполяции и \n
echo 'Привет, $name\n'; // Привет, $name\n (буквально)
// Двойные кавычки — интерполяция и спецсимволы
echo "Привет, $name\n"; // Привет, Аня (с переносом)
echo "Длина: {$name}!\n"; // фигурные скобки для ясности границ
// Конкатенация через точку
$full = "Привет, " . $name . "!";
echo $full; // Привет, Аня!
// Полезные функции
echo strlen("abc"); // 3 (байты)
echo mb_strlen("абв"); // 3 (символы UTF-8)
echo strtoupper("php"); // PHP
echo ucfirst("привет"); // Привет
echo str_replace("a", "o", "banana"); // bonono
echo trim(" x "); // x
echo substr("abcdef", 1, 3); // bcd
var_dump(str_contains("hello", "ell")); // bool(true)
echo implode("-", [1,2,3]); // 1-2-3
print_r(explode(",", "a,b,c")); // [a, b, c]
?>
4. Операторы и условия
<?php
// Сравнение: == свободное, === строгое (с типом)
var_dump(0 == "0"); // bool(true)
var_dump(0 === "0"); // bool(false) — разные типы
$age = 18;
if ($age < 18) {
echo "ребёнок";
} elseif ($age < 65) {
echo "взрослый"; // сюда
} else {
echo "пенсионер";
}
// switch
$day = 3;
switch ($day) {
case 1: echo "Пн"; break;
case 3: echo "Ср"; break; // сюда
default: echo "другой";
}
// match (PHP 8) — строгое сравнение, возвращает значение
$type = match($day) {
1, 2, 3, 4, 5 => "будни", // сюда
6, 7 => "выходные",
};
echo $type; // будни
// Тернарный оператор
$max = (5 > 3) ? 5 : 3; // 5
// ?? — значение по умолчанию, если null/не задано
$user = $name ?? "гость";
// ?: — короткий тернарный (если левое истинно)
$x = "" ?: "пусто"; // пусто
?>
5. Циклы
<?php
// for
for ($i = 0; $i < 3; $i++) {
echo $i; // 012
}
// foreach — по массиву
$colors = ["красный", "зелёный"];
foreach ($colors as $c) {
echo $c, " "; // красный зелёный
}
// foreach с ключом и значением
$ages = ["Аня" => 25, "Боб" => 30];
foreach ($ages as $name => $age) {
echo "$name: $age\n"; // Аня: 25 ...
}
// while
$n = 3;
while ($n > 0) {
echo $n; // 321
$n--;
}
// do-while — тело выполнится хотя бы раз
do {
echo "раз"; // раз
} while (false);
// break / continue
for ($i = 0; $i < 10; $i++) {
if ($i == 2) continue; // пропустить 2
if ($i == 4) break; // остановиться на 4
echo $i; // 013
}
?>
6. Массивы
В PHP массив — это упорядоченная карта: и список, и словарь одновременно.
<?php
// Индексный массив
$nums = [10, 20, 30];
echo $nums[0]; // 10
$nums[] = 40; // добавить в конец
count($nums); // 4
// Ассоциативный массив (ключ => значение)
$user = [
"name" => "Аня",
"age" => 25,
];
echo $user["name"]; // Аня
$user["city"] = "Москва";// добавить пару
// Полезные функции
$a = [3, 1, 2];
sort($a); // [1, 2, 3]
$b = array_map(fn($x) => $x * 2, [1, 2, 3]); // [2, 4, 6]
$c = array_filter([1, 2, 3, 4], fn($x) => $x % 2 == 0); // [2, 4]
$sum = array_sum([1, 2, 3]); // 6
var_dump(in_array(2, [1, 2, 3])); // bool(true)
print_r(array_keys($user)); // [name, age, city]
print_r(array_merge([1], [2, 3])); // [1, 2, 3]
$r = array_reduce([1,2,3], fn($acc, $x) => $acc + $x, 0); // 6
?>
7. Функции
<?php
// Базовая функция
function greet($name) {
return "Привет, $name!";
}
echo greet("Аня"); // Привет, Аня!
// Аргумент по умолчанию
function power($base, $exp = 2) {
return $base ** $exp;
}
echo power(3); // 9
echo power(2, 3); // 8
// Типизация аргументов и возврата
function add(int $a, int $b): int {
return $a + $b;
}
echo add(2, 3); // 5
// Стрелочная функция (PHP 7.4) — видит внешние переменные сама
$factor = 10;
$mul = fn($x) => $x * $factor;
echo $mul(5); // 50
// Анонимная функция (нужен use для захвата)
$prefix = "№";
$label = function($n) use ($prefix) {
return $prefix . $n;
};
echo $label(7); // №7
// Variadic — приём любого числа аргументов
function total(...$nums) {
return array_sum($nums);
}
echo total(1, 2, 3, 4); // 10
// Именованные аргументы (PHP 8)
function box(int $w, int $h) { return $w * $h; }
echo box(h: 4, w: 3); // 12
?>
8. Классы и ООП
<?php
class User {
// Свойства с видимостью
public string $name;
protected int $age; // доступно классу и наследникам
private string $secret; // только этому классу
// Конструктор
public function __construct(string $name, int $age) {
$this->name = $name; // $this — текущий объект
$this->age = $age;
$this->secret = "токен";
}
// Метод
public function greet(): string {
return "Я {$this->name}, мне {$this->age}";
}
// Статическое свойство и метод
public static int $count = 0;
public static function create(string $name): static {
self::$count++;
return new static($name, 0);
}
}
$u = new User("Аня", 25);
echo $u->name; // Аня
echo $u->greet(); // Я Аня, мне 25
// Сокращённое объявление свойств в конструкторе (PHP 8)
class Point {
public function __construct(
public int $x = 0,
public int $y = 0,
) {}
}
$p = new Point(3, 4);
echo $p->x; // 3
?>
9. Наследование, интерфейсы, трейты
<?php
// Абстрактный класс — нельзя создать напрямую
abstract class Animal {
public function __construct(protected string $name) {}
abstract public function sound(): string; // должен реализовать наследник
public function describe(): string {
return "{$this->name} говорит {$this->sound()}";
}
}
// Наследование через extends
class Dog extends Animal {
public function sound(): string {
return "гав";
}
}
$d = new Dog("Рекс");
echo $d->describe(); // Рекс говорит гав
// Интерфейс — контракт
interface Serializable2 {
public function toJson(): string;
}
class Config implements Serializable2 {
public function __construct(private array $data) {}
public function toJson(): string {
return json_encode($this->data);
}
}
// Трейт — переиспользуемый набор методов
trait Timestamped {
public function now(): string {
return date("Y-m-d");
}
}
class Post {
use Timestamped;
}
echo (new Post)->now(); // например 2026-06-16
?>
10. Исключения
<?php
function divide(int $a, int $b): float {
if ($b === 0) {
// throw — бросить исключение
throw new InvalidArgumentException("Деление на ноль");
}
return $a / $b;
}
try {
echo divide(10, 2); // 5
echo divide(10, 0); // бросит исключение
} catch (InvalidArgumentException $e) {
// ловим конкретный тип
echo "Ошибка: " . $e->getMessage(); // Ошибка: Деление на ноль
} catch (Throwable $e) {
// Throwable ловит вообще всё
echo "Непредвиденное";
} finally {
// выполнится в любом случае
echo "\nГотово";
}
// Свой класс исключения
class PaymentException extends Exception {}
// throw new PaymentException("Недостаточно средств");
?>
11. Суперглобальные и формы
PHP автоматически наполняет суперглобальные массивы данными HTTP-запроса.
<?php
// $_GET — параметры из строки запроса: page.php?q=php&n=5
$query = $_GET["q"] ?? ""; // безопасно с ??
$num = (int)($_GET["n"] ?? 0); // приводим к int
// $_POST — данные отправленной формы
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$login = trim($_POST["login"] ?? "");
// ВСЕГДА экранируй ввод перед выводом в HTML!
echo htmlspecialchars($login); // защита от XSS
}
// Другие суперглобальные:
// $_SERVER — данные сервера и запроса (URI, IP, заголовки)
// $_SESSION — сессия пользователя (после session_start())
// $_COOKIE — куки
// $_FILES — загруженные файлы
?>
<form method="post">
<input name="login">
<button>Войти</button>
</form>
12. Полезное: PDO, JSON, неймспейсы
<?php
// --- JSON ---
$data = ["name" => "Аня", "age" => 25];
$json = json_encode($data, JSON_UNESCAPED_UNICODE);
echo $json; // {"name":"Аня","age":25}
$back = json_decode($json, true); // true => в ассоц. массив
echo $back["name"]; // Аня
// --- PDO: работа с БД через подготовленные запросы ---
$pdo = new PDO("sqlite::memory:");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec("CREATE TABLE users (id INTEGER, name TEXT)");
// Подготовленный запрос защищает от SQL-инъекций
$stmt = $pdo->prepare("INSERT INTO users VALUES (?, ?)");
$stmt->execute([1, "Аня"]);
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([1]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
echo $row["name"]; // Аня
?>
<?php
// --- Неймспейсы: группировка кода и избежание конфликтов имён ---
namespace App\Models;
class Order {}
// В другом файле подключение:
// use App\Models\Order;
// $o = new Order();
//
// Автозагрузка классов обычно через Composer (composer.json -> PSR-4),
// тогда require вручную не нужен.
?>