🐘 PHP для начинающих: JSON CRUD API
Современные веб-приложения не обходятся без JSON API: они позволяют создавать, читать, обновлять и удалять данные (CRUD) с помощью лёгкого и универсального формата JSON.
Что полезного можно вынести из этой статьи:
CRUD операции: POST — добавить, GET — получить, PUT/PATCH — изменить, DELETE — удалить.
JSON vs БД: JSON файлы подходят для маленьких проектов, для масштабных приложений лучше базы данных.
Среда PHP: PHP 8.0+ с расширениями
Фреймворк или нативный PHP: Laravel и Slim ускоряют разработку сложных API, нативный PHP — для простых или кастомных решений.
Безопасность: проверка и очистка входных данных, CSRF-токены, подготовленные SQL-запросы, корректные права доступа к файлам.
Масштабирование: кэширование, пагинация, профилирование производительности, переход на базу данных при росте проекта.
Статья также показывает, как структурировать проект, готовить API к переходу с JSON на БД и использовать инструменты для управления API, например Zuplo.
👉 Читать статью
Библиотека пхпшника
#php_азбука
Современные веб-приложения не обходятся без JSON API: они позволяют создавать, читать, обновлять и удалять данные (CRUD) с помощью лёгкого и универсального формата JSON.
Что полезного можно вынести из этой статьи:
CRUD операции: POST — добавить, GET — получить, PUT/PATCH — изменить, DELETE — удалить.
JSON vs БД: JSON файлы подходят для маленьких проектов, для масштабных приложений лучше базы данных.
Среда PHP: PHP 8.0+ с расширениями
ext-json и ext-pdo, Composer, Docker, PHPUnit.Фреймворк или нативный PHP: Laravel и Slim ускоряют разработку сложных API, нативный PHP — для простых или кастомных решений.
Безопасность: проверка и очистка входных данных, CSRF-токены, подготовленные SQL-запросы, корректные права доступа к файлам.
Масштабирование: кэширование, пагинация, профилирование производительности, переход на базу данных при росте проекта.
Статья также показывает, как структурировать проект, готовить API к переходу с JSON на БД и использовать инструменты для управления API, например Zuplo.
👉 Читать статью
Библиотека пхпшника
#php_азбука
🌚1
Внутреннее устройство PHP-массива (HashTable)
На поверхности
📦 Базовая структура
PHP хранит массив как
Два режима работы:
Packed — когда ключи 0..n-1 без дыр, работает как плотный список.
Mixed — как ассоциативный словарь (строковые и целочисленные ключи). Переключение прозрачно.
🔑 Хеш и распределение
Строковые ключи хешируются внутренней функцией движка; индекс вычисляется по маске таблицы (степень двойки → быстрый
Числовые ключи идут напрямую как индексы (в packed) или как int-ключи (в mixed).
Порядок обхода = порядок вставки.
🌊 Коллизии
Коллизии разрешаются через связные цепочки внутри хеш-слотов (указатели между бакетами). Деревьев, как в Java 8, нет — в худшем случае поиск линейный по цепочке. На практике за счёт маски/resize средняя сложность операций остаётся O(1).
⚡️ Ресайзинг
При росте элементов таблица увеличивается (обычно ×2), элементы перераскладываются в новые слоты по той же маске. Это дорогая операция, но амортизированно остаётся дешёвой.
📊 Производительность (в среднем)
⚖️ Важные нюансы
Порядок важен: массив — упорядоченная структура (вставочный порядок сохраняется).
Типы ключей: только int и string. Числовые строки автоматически приводятся к int (например,
Копирование при записи (COW): присваивание массива создаёт «разделяемую» копию; реальное копирование — при первой модификации. Это экономит память и часто снимает страх «дорого скопировал».
Итерация не fail-fast:
🧮 Когда массив — не то, что нужно
В PHP массив не принимает объекты как ключи. Для кейсов «ключ = объект» есть специальные структуры:
🔍 Частые подводные камни
«Почему
«Почему копия массива не дорога?» — из-за Copy-On-Write: реальный дубликат появится только при изменении.
Библиотека пхпшника
#php_азбука
На поверхности
array — просто «ключ-значение». Под капотом — компактная hash-таблица Zend Engine с режимами для разных сценариев и сохранением порядка вставки. Официально: «array в PHP — упорядоченная карта».📦 Базовая структура
PHP хранит массив как
HashTable (Zend): есть таблица хеш-слотов и массив «бакетов» с элементами. С PHP 7 реализация компактная: меньше аллокаций и память/кэш-локальность лучше по сравнению с PHP 5.Два режима работы:
Packed — когда ключи 0..n-1 без дыр, работает как плотный список.
Mixed — как ассоциативный словарь (строковые и целочисленные ключи). Переключение прозрачно.
🔑 Хеш и распределение
Строковые ключи хешируются внутренней функцией движка; индекс вычисляется по маске таблицы (степень двойки → быстрый
& (n-1)).Числовые ключи идут напрямую как индексы (в packed) или как int-ключи (в mixed).
Порядок обхода = порядок вставки.
🌊 Коллизии
Коллизии разрешаются через связные цепочки внутри хеш-слотов (указатели между бакетами). Деревьев, как в Java 8, нет — в худшем случае поиск линейный по цепочке. На практике за счёт маски/resize средняя сложность операций остаётся O(1).
⚡️ Ресайзинг
При росте элементов таблица увеличивается (обычно ×2), элементы перераскладываются в новые слоты по той же маске. Это дорогая операция, но амортизированно остаётся дешёвой.
📊 Производительность (в среднем)
isset($a[$k]) / чтение / запись — O(1); в крайне «плохих» случаях — O(n) из-за цепочек. Хорошее распределение ключей и разумный размер таблицы держат вас в O(1).⚖️ Важные нюансы
Порядок важен: массив — упорядоченная структура (вставочный порядок сохраняется).
Типы ключей: только int и string. Числовые строки автоматически приводятся к int (например,
«8» → 8; «08» останется строкой). Объекты/массивы как ключи — нельзя.Копирование при записи (COW): присваивание массива создаёт «разделяемую» копию; реальное копирование — при первой модификации. Это экономит память и часто снимает страх «дорого скопировал».
Итерация не fail-fast:
foreach не бросает исключения при изменении массива во время обхода; поведение «слабо-консистентное», ориентируйтесь на читаемость и аккуратность. (Специального fail-fast механизма как в JDK нет; официальная дока описывает лишь общие правила итерации массива.) 🧮 Когда массив — не то, что нужно
В PHP массив не принимает объекты как ключи. Для кейсов «ключ = объект» есть специальные структуры:
SplObjectStorage — map/set для объектов-ключей. Удобно для учёта уникальных объектов, привязки метаданных к объекту. WeakMap (PHP 8+) — как map «объект → значение», но не удерживает объект от GC: когда объект больше нигде не живёт, пара удаляется из карты. Идеально для кэшей, завязанных на жизненный цикл объекта. 🔍 Частые подводные камни
«Почему
«123» стал ключом 123?» — потому что numeric string → int по правилам массива. Если хотите именно строковый ключ, сделайте его явно невалидной «десятичной» формой (например, «+123» или «00123»), или храните в другой структуре.«Почему копия массива не дорога?» — из-за Copy-On-Write: реальный дубликат появится только при изменении.
Библиотека пхпшника
#php_азбука
👍10❤1
🐘 PHP для начинающих: Blade Components и Slots — чистый код без усилий
Когда шаблоны в Laravel начинают превращаться в HTML-спагетти, на помощь приходят Blade Components и Slots.
Они позволяют разбивать интерфейс на модульные и переиспользуемые элементы, избавляясь от копипаста и упрощая поддержку проекта.
🔧 Зачем они нужны
Компоненты дают возможность описать один раз кусок интерфейса (например, карточку, алерт или модалку) и использовать его где угодно в проекте.
Slots позволяют вставлять внутрь таких компонентов любой контент — текст, разметку, другие компоненты.
🎨 В итоге вы получаете
🔸 чище и понятнее Blade-шаблоны
🔸 меньше повторений
🔸 гибкую структуру с возможностью передачи данных и кастомизации
🔸 переиспользуемые куски UI, похожие на React-компоненты
👉 Читать статью
Это уже не «Hello World» писать. Для таких решений нужно знать не только язык. Подтянуть архитектуру можно на нашем интенсиве. До конца октября со скидкой!
Библиотека пхпшника
#php_азбука
Когда шаблоны в Laravel начинают превращаться в HTML-спагетти, на помощь приходят Blade Components и Slots.
Они позволяют разбивать интерфейс на модульные и переиспользуемые элементы, избавляясь от копипаста и упрощая поддержку проекта.
🔧 Зачем они нужны
Компоненты дают возможность описать один раз кусок интерфейса (например, карточку, алерт или модалку) и использовать его где угодно в проекте.
Slots позволяют вставлять внутрь таких компонентов любой контент — текст, разметку, другие компоненты.
🎨 В итоге вы получаете
🔸 чище и понятнее Blade-шаблоны
🔸 меньше повторений
🔸 гибкую структуру с возможностью передачи данных и кастомизации
🔸 переиспользуемые куски UI, похожие на React-компоненты
👉 Читать статью
Это уже не «Hello World» писать. Для таких решений нужно знать не только язык. Подтянуть архитектуру можно на нашем интенсиве. До конца октября со скидкой!
Библиотека пхпшника
#php_азбука
🐘 PHP для начинающих: жизненный цикл приложений на Laravel
Статья объясняет жизненный цикл Laravel (Laravel Lifecycle) — то есть путь, который проходит HTTP-запрос от пользователя до формирования ответа в браузере.
Она предназначена для начинающих PHP-разработчиков и часто встречается на собеседованиях.
Ключевые идеи:
Laravel Lifecycle — это последовательность шагов, через которые проходит запрос внутри фреймворка.
Основные этапы:
Service Providers — инициализируют основные функции: БД, кэш, маршрутизацию, аутентификацию.
Middleware — фильтры, проверяющие запросы (например, авторизацию).
Routing и Controller — определяют, какой метод контроллера должен обработать запрос.
Models и Database — при необходимости извлекаются данные из БД.
View и Response — данные преобразуются в HTML-ответ и отправляются пользователю.
Авторы объясняют это на примере ресторана:
вход —
кухня —
повар — контроллер,
блюдо — ответ пользователю.
Понимание жизненного цикла Laravel помогает лучше дебажить, писать оптимизированный код и осознать, как фреймворк превращает обычный HTTP-запрос в готовую HTML-страницу.
👉 Читать статью
Библиотека пхпшника
#php_азбука
Статья объясняет жизненный цикл Laravel (Laravel Lifecycle) — то есть путь, который проходит HTTP-запрос от пользователя до формирования ответа в браузере.
Она предназначена для начинающих PHP-разработчиков и часто встречается на собеседованиях.
Ключевые идеи:
Laravel Lifecycle — это последовательность шагов, через которые проходит запрос внутри фреймворка.
Основные этапы:
public/index.php — точка входа, с которой всё начинается.bootstrap/app.php — создаётся экземпляр приложения и подгружается ядро (Kernel).Service Providers — инициализируют основные функции: БД, кэш, маршрутизацию, аутентификацию.
Middleware — фильтры, проверяющие запросы (например, авторизацию).
Routing и Controller — определяют, какой метод контроллера должен обработать запрос.
Models и Database — при необходимости извлекаются данные из БД.
View и Response — данные преобразуются в HTML-ответ и отправляются пользователю.
Авторы объясняют это на примере ресторана:
вход —
index.php,кухня —
app.php,повар — контроллер,
блюдо — ответ пользователю.
Понимание жизненного цикла Laravel помогает лучше дебажить, писать оптимизированный код и осознать, как фреймворк превращает обычный HTTP-запрос в готовую HTML-страницу.
👉 Читать статью
Библиотека пхпшника
#php_азбука
❤3👍1