← На главную

Разработчик бесит PHP, но увольняется с благодарностью

19.05.2026 20:41 · hackernews

Разработчик пять лет писал на PHP в компании, где весь бэкенд ещё с 2007 года построен на этом языке. Он не собирался работать с PHP, но жизнь заставила. Теперь он уволился и решил поделиться тем, что его раздражало всё это время. Главные претензии — к массивам и системе типов.

Массивы в PHP — это вообще не массивы в привычном понимании. Это упорядоченный словарь «ключ-значение». Звучит гибко, но на практике вылезают баги. Создаёшь простой список фруктов: $fruits = ["apples", "oranges", "limes"]. Всё работает, пока не начнёшь мутировать. Фильтруешь через array_filter() — и ключи сбиваются. Вместо [0 => "limes"] получаешь [2 => "limes"]. Удалил элемент через unset() — индексы дырявые. PHP не пересчитывает их сам. Чтобы привести массив в порядок, нужно вручную вызывать array_values(). Забыл — лови баг с Undefined array key 0. Разработчика бесит, что простую коллекцию нельзя взять и получить с нормальным порядковым индексом — приходится управлять ключами вручную.

Вторая боль — типы свойств классов. В PHP5 добавили опциональную систему типов, к PHP7 она доросла до свойств. Но поскольку типы встраивали в уже динамический язык, правила приходилось придумывать задним числом. Пример: класс Book с полями $title (без типа), string $author и ?string $publisher. После создания объекта поле без типа имеет значение NULL, а два других — нет. Они в состоянии «uninitialized». И если попытаться проверить их через is_null(), упадёт фатальная ошибка. Не предупреждение, а именно ошибка. Плюс PHP позволяет на лету навешивать на объект новые свойства: $b->foo = "bar". В итоге разработчик не знает, на какую проверку полагаться — is_null(), isset(), property_exists() или empty(). По его мнению, uninitialized как состояние вообще не нужно. Для nullable-свойств можно просто ставить null по умолчанию, а для обязательных — требовать инициализацию в конструкторе.

Несмотря на всю критику, автор считает, что PHP получает незаслуженно много хейта. Язык работает, с ним можно делать всё то же, что и на других. Из плюсов — низкий порог входа: изменил файл — сразу работает. Laravel — добротный фреймворк с продуманной «автомагией». Ну и знаки доллара в переменных напоминают, ради чего всё затевается.

Читать оригинал →