Перейти к содержимому
Поиск
Php Разработка

PHP: полный мануал с примерами, функциями и ООП

Практический мануал PHP: от переменных и читаемого кода до безопасных форм, интеграций, базы данных и ООП на примере магазина. Учебный маршрут, поиск функций, подробные примеры, разбор ошибок и исходники для скачивания.

Александр НекрасовИзменено:
Практический мануал PHP: от переменных и функций к объектной модели интернет-магазина
PHP 8.5.11468 глав6256 карточек справочника
Дерево руководства

Глава 201 · Практика

Предопределённые интерфейсы и классы: карта контрактов PHP

Корневая карта встроенных интерфейсов и выбор контракта по реальной задаче.

Предопределённые интерфейсы и классы: договоры ядра

Интерфейс отвечает на вопрос «что объект обязуется уметь». Благодаря общему контракту foreach, count(), сортировка и обработка ошибок работают с разными классами одинаковым способом. Корневая страница официального справочника — каталог таких договоров и связанных служебных классов.

СемействоПрактический смыслКуда идти дальше
Traversable, Iterator, IteratorAggregateОбъект можно пройти через foreachитераторы
ArrayAccessДоступ к объекту синтаксисом квадратных скобокArrayAccess
CountableОбъект принимает count()Countable
StringableОбъект умеет представить себя строкойStringable
ThrowableОбщий тип Error и Exceptionисключения
UnitEnum, BackedEnumОбщий API перечисленийперечисления
Closure, Generator, FiberВыполняемое поведение и приостанавливаемое выполнениеClosure
WeakReference, WeakMap, SensitiveParameterValueСлужебные модели памяти и диагностикивстроенные классы
Один объект становится и перебираемым, и считаемымСамостоятельный пример
<?php
final class OrderLines implements IteratorAggregate, Countable
{
    public function __construct(private array $lines) {}

    public function getIterator(): Traversable
    {
        return new ArrayIterator($this->lines);
    }

    public function count(): int
    {
        return count($this->lines);
    }
}

$lines = new OrderLines(['Чай', 'Кофе']);
echo count($lines), " позиции\n";
foreach ($lines as $line) {
    echo '- ', $line, "\n";
}
Ожидаемый результат
2 позиции
- Чай
- Кофе

IteratorAggregate обещает getIterator(), а Countable — count(). PHP проверяет наличие совместимых методов. Интерфейс не хранит строки за объект: он задаёт контракт, который реализует класс.

Отдать публичный JSON, не раскрывая внутренний диагностический идентификаторСамостоятельный пример
<?php
final class ApiResult implements JsonSerializable
{
    public function __construct(
        private int $status,
        private array $data,
        private string $internalTraceId,
    ) {}

    public function jsonSerialize(): array
    {
        return ['status' => $this->status, 'data' => $this->data];
    }
}

$result = new ApiResult(200, ['orderId' => 17], 'trace-secret-42');
echo json_encode($result, JSON_THROW_ON_ERROR), "\n";
Ожидаемый результат
{"status":200,"data":{"orderId":17}}

json_encode() узнаёт договор JsonSerializable и вызывает jsonSerialize(). Класс сам определяет публичную форму ответа: обязательные данные выходят, а внутренний trace ID не раскрывается. Это практическая польза интерфейса — готовая функция PHP работает с вашим объектом через известный контракт.

Источники и обсуждения

Код и руководство с собой

Скачайте самостоятельные примеры с исходными данными, инструкциями и ожидаемыми результатами. Примеры HTTP и фрагменты для проекта помечены отдельно: им нужно указанное окружение.

Код не исполняется на сайте. Скачайте нужный пример и запускайте его в своём локальном окружении.

Материалы сверены 2026-10-12. Примеры и объяснения написаны для этого руководства; источники и обсуждения доступны в каждой главе.