🎲 Мы не только учим, но и играем!
На экспресс-курсе «Математика для Data Science» — викторина с призом TG-Premium 🎁
Проверь знания, прокачай математику и забери приз.
‼️ Оплатишь до 19 октября — получишь базовый курс в подарок.
👉 Записаться на курс
На экспресс-курсе «Математика для Data Science» — викторина с призом TG-Premium 🎁
Проверь знания, прокачай математику и забери приз.
‼️ Оплатишь до 19 октября — получишь базовый курс в подарок.
👉 Записаться на курс
🐘 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_азбука
Эрик Рэймонд, одна из ключевых фигур в истории open source и автор The Cathedral and the Bazaar, резко высказался о кодексах поведения в проектах с открытым исходным кодом.
По его словам, за десять лет стало ясно: «Codes of Conduct» не укрепляют сообщество, а наоборот превращаются в источник конфликтов, политики и бессмысленной драмы.
Рэймонд предлагает радикальное решение — полностью отказаться от подобных документов. А если формально без них нельзя, заменить всё одной фразой: «Если работа с вами доставляет больше неудобств, чем того требует ваш вклад, вас выгонят».
У нас тоже есть свой X
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
Недавно мы анонсировали старт нового курса «Математика для Data Science».
В ближайшие дни выйдет серия постов о том, что ждёт вас на курсе, а пока познакомим вас с его экспертами.
Спикеры курса:
👤 Ксения Кондаурова
Преподаватель и автор курсов для бакалавриата Центрального Университета (Т-Банк), спикер и методист для Edutoria (Сбербанк). Ксения расскажет, как линейная алгебра применяется для построения предсказательных моделей, и научит проверять гипотезы для бизнеса с помощью статистики.
👤 Диана Миронидис
Преподаватель НИУ ВШЭ, автор и методист Яндекс Практикума. Самый экстравагантный преподаватель из всех, с кем вы учились, — убедитесь, что математика может быть нескучной. Диана погрузит в математический анализ, научит исследовать функции и находить параметры, при которых ошибка модели минимальна.
👤 Маргарита Бурова
Академический руководитель образовательных программ по аналитике и анализу данных, Wildberries & Russ. Проведёт квиз с розыгрышем годовой подписки TG Premium. Маргарита — эксперт в дата-сайенс, ИИ и математических методах анализа данных, фанат развития ИТ-образования.
Вместе с экспертами за 8 недель вы не просто получите знания, а познакомитесь с математикой заново.
🎁 Только при оплате до 19 октября курс «Базовая математика» в подарок!
👉 Записаться на курс
В ближайшие дни выйдет серия постов о том, что ждёт вас на курсе, а пока познакомим вас с его экспертами.
Спикеры курса:
👤 Ксения Кондаурова
Преподаватель и автор курсов для бакалавриата Центрального Университета (Т-Банк), спикер и методист для Edutoria (Сбербанк). Ксения расскажет, как линейная алгебра применяется для построения предсказательных моделей, и научит проверять гипотезы для бизнеса с помощью статистики.
👤 Диана Миронидис
Преподаватель НИУ ВШЭ, автор и методист Яндекс Практикума. Самый экстравагантный преподаватель из всех, с кем вы учились, — убедитесь, что математика может быть нескучной. Диана погрузит в математический анализ, научит исследовать функции и находить параметры, при которых ошибка модели минимальна.
👤 Маргарита Бурова
Академический руководитель образовательных программ по аналитике и анализу данных, Wildberries & Russ. Проведёт квиз с розыгрышем годовой подписки TG Premium. Маргарита — эксперт в дата-сайенс, ИИ и математических методах анализа данных, фанат развития ИТ-образования.
Вместе с экспертами за 8 недель вы не просто получите знания, а познакомитесь с математикой заново.
🎁 Только при оплате до 19 октября курс «Базовая математика» в подарок!
👉 Записаться на курс
🧠 Опишите свой день одним коммитом
Пример:
Каждый день — как новый релиз с багами и надеждой на hotfix 😅
👇 Пишите свой коммит в комментариях
Библиотека пхпшника
#байтовый_юмор
Пример:
git commit -m «fix everything again»Каждый день — как новый релиз с багами и надеждой на hotfix 😅
👇 Пишите свой коммит в комментариях
Библиотека пхпшника
#байтовый_юмор
😁1
Forwarded from Книги для программистов
Все мы знаем: жизнь коротка, а правки от заказчика — вечны. Сегодня нужно просто добавить кнопку «Купить», завтра — внедрить «модуль предсказания желания покупателя на основе ИИ».
Книга учит писать код, который не сломается от одного слова «поменялись требования». Автор — не только фанат SOLID и паттернов, но и мастер того, как сделать так, чтобы твой код не превращался в спагетти после первого рефакторинга.
📌 Что внутри:
Please open Telegram to view this post
VIEW IN TELEGRAM
♾️ 17 формул, которые изменили мир
Математика в действии — как уравнения, придуманные века назад, сегодня управляют интернетом, медициной, космосом и вашими финансами.
📎 Читать статью
А если после статьи захотите разобраться, как эта математика работает в Data Science — вот экспресс-курс, который всё расставит по полочкам:
«Математика для Data Science»
🎓 За 2 месяца поймёте, как работают алгоритмы ML под капотом.
🗓️ Старт — 6 ноября
👉 Записаться на курс
Математика в действии — как уравнения, придуманные века назад, сегодня управляют интернетом, медициной, космосом и вашими финансами.
📎 Читать статью
А если после статьи захотите разобраться, как эта математика работает в Data Science — вот экспресс-курс, который всё расставит по полочкам:
«Математика для Data Science»
— практика и живые уроки
— разбор кода и проверка домашних
— поддержка в Telegram-чате
🎓 За 2 месяца поймёте, как работают алгоритмы ML под капотом.
🗓️ Старт — 6 ноября
👉 Записаться на курс
❤1
⌨️ Топ-вакансий по PHP за неделю
Backend-разработчик (Laravel) — от 4 000 $, Удалёнка (Москва)
PHP-разработчик (Symfony) — от 160 000 ₽, Удаленка (Москва)
РНР Developer (Yii 2) — от 250 000 до 300 000 ₽, Удалёнка (Москва)
Team Lead (PHP / Bitrix) — от 298 900 до 459 800 ₽, Удалёнка (Москва)
➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
Backend-разработчик (Laravel) — от 4 000 $, Удалёнка (Москва)
PHP-разработчик (Symfony) — от 160 000 ₽, Удаленка (Москва)
РНР Developer (Yii 2) — от 250 000 до 300 000 ₽, Удалёнка (Москва)
Team Lead (PHP / Bitrix) — от 298 900 до 459 800 ₽, Удалёнка (Москва)
➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
👍1
⏰ Сегодня последний день!
🎁 Только при оплате до 19 октября — курс «Базовая математика» в подарок!
Успей попасть на экспресс-курс «Математика для Data Science» — 10 живых вебинаров, практика на Python, поддержка менторов и преподаватели из ВШЭ, Яндекс Практикума и Wildberries.
За 2 месяца разберёшься с тем, на чём держится Data Science:
🎓 Построишь математический фундамент и поймёшь, как работают алгоритмы ML под капотом.
👉 Записаться на курс
Старт — 6 ноября, не упусти бонус!🎁
🎁 Только при оплате до 19 октября — курс «Базовая математика» в подарок!
Успей попасть на экспресс-курс «Математика для Data Science» — 10 живых вебинаров, практика на Python, поддержка менторов и преподаватели из ВШЭ, Яндекс Практикума и Wildberries.
За 2 месяца разберёшься с тем, на чём держится Data Science:
• векторы, матрицы и регрессия;
• градиенты, оптимизация, вероятности и статистика;
• реальные задачи анализа данных;
🎓 Построишь математический фундамент и поймёшь, как работают алгоритмы ML под капотом.
👉 Записаться на курс
Старт — 6 ноября, не упусти бонус!🎁
💡 Совет по Laravel: метод «containsOneItem»
Иногда нам нужно убедиться, что коллекция содержит только один элемент. Вместо того чтобы вызывать метод count для коллекции, знаете ли вы, что есть элегантный метод
Библиотека пхпшника
#vardump
Иногда нам нужно убедиться, что коллекция содержит только один элемент. Вместо того чтобы вызывать метод count для коллекции, знаете ли вы, что есть элегантный метод
containsOneItem(), который делает то же самое? 🚀Библиотека пхпшника
#vardump
👍9😁6❤2👾1
🔥 Laravel + Битрикс: союз, который не должен был случиться
Команда KISLOROD доказала, что миры можно объединить 🌍
Без форков, боли SEO-шников и падений 1С.
🧩 Что сделали:
— Laravel стал «соседом» Битрикса: берет на себя API, каталоги, фильтры, уведомления.
— Битрикс остался админкой и управляет коммерцией.
— Авторизация через JWT, события через Redis Streams, наблюдаемость через OpenTelemetry и Prometheus.
🚀 Результат:
Каталог отвечает за 150 мс, корзина — за 120 мс, заказы летят без тормозов.
А фронт теперь ходит в стабильный API и вообще не знает о Битриксе.
💡 Почему это важно:
Можно эволюционно мигрировать с монолита к headless-архитектуре — без боли и ночных деплоев.
📖 Полная статья на Хабре
Чтобы также проектировать приложения советуем пройти наш интенсив по архитектуре пока он со скидкой!
Библиотека пхпшника
«Если ваш Битрикс тормозит, а Laravel кажется из другой вселенной — это статья для вас.»
Команда KISLOROD доказала, что миры можно объединить 🌍
Без форков, боли SEO-шников и падений 1С.
🧩 Что сделали:
— Laravel стал «соседом» Битрикса: берет на себя API, каталоги, фильтры, уведомления.
— Битрикс остался админкой и управляет коммерцией.
— Авторизация через JWT, события через Redis Streams, наблюдаемость через OpenTelemetry и Prometheus.
🚀 Результат:
Каталог отвечает за 150 мс, корзина — за 120 мс, заказы летят без тормозов.
А фронт теперь ходит в стабильный API и вообще не знает о Битриксе.
💡 Почему это важно:
Можно эволюционно мигрировать с монолита к headless-архитектуре — без боли и ночных деплоев.
📖 Полная статья на Хабре
Чтобы также проектировать приложения советуем пройти наш интенсив по архитектуре пока он со скидкой!
Библиотека пхпшника
😁10❤3👍2🔥2
Forwarded from Библиотека задач по PHP | тесты, код, задания
Что произойдет, если передать объект класса в функцию serialize(), а класс реализует интерфейс Serializable?
Anonymous Quiz
4%
Объект не будет сериализован
62%
Метод serialize() класса будет вызван
5%
PHP выбросит ошибку
29%
Объект сериализуется по умолчанию
💡 Монолит против микросервисов: кто реально выигрывает?
Когда слышите слово «монолит», что первое приходит в голову?
👉 «Legacy», «тормозит», «нужно распилить»?
А зря. Хорошо спроектированный монолит может быть быстрее, надёжнее и проще в поддержке, чем плохо реализованные микросервисы. И вот почему 👇
🚧 Миф о «микросервисы = современно»
Архитектура — не мода. Она должна соответствовать структуре команды и бизнес-целям, а не трендам.
⚙️ Скрытая сложность
Каждый микросервис = отдельный репозиторий, пайплайн, конфиг, деплой.
В PHP это часто означает 5 Laravel-проектов с дублированной логикой и разъехавшимися зависимостями.
🏎️ Скорость против хаоса
Монолит → единый деплой, тесты и целостность.
Микросервисы → интеграционные баги, версия API, синхронизация.
🧱 Модульность — это не Kubernetes
DDD позволяет сделать монолит модульным: чёткие границы, без сетевых вызовов и лишней задержки.
🧭 Главное — стратегическая простота
Микросервисы не зло, просто они дорогие.
Начни с чистого монолита, вырасти в микросервисы — не наоборот.
Библиотека пхпшника
#элементарный_выбор
Когда слышите слово «монолит», что первое приходит в голову?
👉 «Legacy», «тормозит», «нужно распилить»?
А зря. Хорошо спроектированный монолит может быть быстрее, надёжнее и проще в поддержке, чем плохо реализованные микросервисы. И вот почему 👇
🚧 Миф о «микросервисы = современно»
Архитектура — не мода. Она должна соответствовать структуре команды и бизнес-целям, а не трендам.
⚙️ Скрытая сложность
Каждый микросервис = отдельный репозиторий, пайплайн, конфиг, деплой.
В PHP это часто означает 5 Laravel-проектов с дублированной логикой и разъехавшимися зависимостями.
🏎️ Скорость против хаоса
Монолит → единый деплой, тесты и целостность.
Микросервисы → интеграционные баги, версия API, синхронизация.
🧱 Модульность — это не Kubernetes
DDD позволяет сделать монолит модульным: чёткие границы, без сетевых вызовов и лишней задержки.
🧭 Главное — стратегическая простота
Микросервисы не зло, просто они дорогие.
Начни с чистого монолита, вырасти в микросервисы — не наоборот.
Библиотека пхпшника
#элементарный_выбор
👍10😁3
🔥 Когда понимаешь SOLID — жизнь становится проще
В октябре действует скидка 40% на все курсы от Proglib Academy, включая интенсив «Архитектуры и шаблоны проектирования»
📘 На интенсиве ты:
— разберёшься, как проектировать приложения, которые не ломаются при каждом изменении;
— освоишь SOLID-принципы, IoC, адаптеры и фабрики;
— научишься строить масштабируемые архитектуры;
— создашь собственную игру «Звёздные войны».
👨💻 Примеры кода на C#, Java, Python, PHP, C++ и JavaScript. Главное — понимать принципы, а не язык.
Преподаватель — Евгений Тюменцев, директор компании HWdTech, разрабатывал многопоточные кроссплатформенные приложения для IBM Watson.
📆 Формат: онлайн, 1 месяц.
📚 9 лекций + 2 бонусных занятия + практика.
Интенсив подойдёт джунам, которые хотят апнуться до мидла, и мидлам, мечтающим о роли архитектора.
👉 Переходи к курсам со скидкой 40%
В октябре действует скидка 40% на все курсы от Proglib Academy, включая интенсив «Архитектуры и шаблоны проектирования»
📘 На интенсиве ты:
— разберёшься, как проектировать приложения, которые не ломаются при каждом изменении;
— освоишь SOLID-принципы, IoC, адаптеры и фабрики;
— научишься строить масштабируемые архитектуры;
— создашь собственную игру «Звёздные войны».
👨💻 Примеры кода на C#, Java, Python, PHP, C++ и JavaScript. Главное — понимать принципы, а не язык.
Преподаватель — Евгений Тюменцев, директор компании HWdTech, разрабатывал многопоточные кроссплатформенные приложения для IBM Watson.
📆 Формат: онлайн, 1 месяц.
📚 9 лекций + 2 бонусных занятия + практика.
Интенсив подойдёт джунам, которые хотят апнуться до мидла, и мидлам, мечтающим о роли архитектора.
👉 Переходи к курсам со скидкой 40%
😁2
🚀 composer/xdebug-handler — отключение Xdebug для повышения производительности
Библиотека composer/xdebug-handler предназначена для временного отключения расширения Xdebug в процессе выполнения PHP-скриптов, что позволяет значительно ускорить операции, такие как установка зависимостей с помощью Composer.
Зачем это нужно?
Xdebug предоставляет мощные возможности для отладки и профилирования PHP-кода, однако его включение может существенно замедлить выполнение скриптов. Например, Composer может работать в 3–4 раза медленнее при активном Xdebug, даже если не используются функции профилирования.
composer/xdebug-handler автоматически перезапускает процесс PHP без загрузки Xdebug, сохраняя при этом все необходимые настройки и переменные окружения. После завершения работы Xdebug восстанавливается.
Когда стоит использовать?
В CLI-скриптах, например, при запуске Composer.
В CI/CD пайплайнах, где важна скорость выполнения.
В разработке, когда необходимо временно ускорить выполнение скриптов без отключения Xdebug.
Установка
📦 Ссылка на репозиторий GitHub
Библиотека пхпшника
#инструменты
Библиотека composer/xdebug-handler предназначена для временного отключения расширения Xdebug в процессе выполнения PHP-скриптов, что позволяет значительно ускорить операции, такие как установка зависимостей с помощью Composer.
Зачем это нужно?
Xdebug предоставляет мощные возможности для отладки и профилирования PHP-кода, однако его включение может существенно замедлить выполнение скриптов. Например, Composer может работать в 3–4 раза медленнее при активном Xdebug, даже если не используются функции профилирования.
composer/xdebug-handler автоматически перезапускает процесс PHP без загрузки Xdebug, сохраняя при этом все необходимые настройки и переменные окружения. После завершения работы Xdebug восстанавливается.
Когда стоит использовать?
В CLI-скриптах, например, при запуске Composer.
В CI/CD пайплайнах, где важна скорость выполнения.
В разработке, когда необходимо временно ускорить выполнение скриптов без отключения Xdebug.
Установка
composer require composer/xdebug-handler📦 Ссылка на репозиторий GitHub
Библиотека пхпшника
#инструменты
How to: обнаружить и добавить отсутствующий RefreshDatabase в тестах Laravel
Статья объясняет проблему при тестировании Laravel-приложений: если в тестах не используется трейт
Автор показывает, как это предотвратить:
🔸 можно добавить
🔸 можно искать тесты без этого трейта с помощью
— эта команда находит тесты, где нет трейта, но есть использование фабрик.
🔸можно расширить поиск и даже встроить такую проверку в GitHub Actions, чтобы CI падал, если в PR есть тесты без трейта, но с операциями, изменяющими БД.
В конце совет:
🔹 всегда использовать
🔹 предпочитать фабрики и сидеры ручному созданию моделей;
🔹 проверять, что HTTP-тесты, создающие записи, также используют этот трейт.
🔗 Читать статью
Библиотека пхпшника
Статья объясняет проблему при тестировании Laravel-приложений: если в тестах не используется трейт
RefreshDatabase, данные, созданные в БД (через фабрики, сидеры или HTTP-запросы), могут сохраняться между тестами и вызывать случайные ошибки при последующих запусках.Автор показывает, как это предотвратить:
🔸 можно добавить
RefreshDatabase глобально для всех feature-тестов через tests/Pest.php;🔸 можно искать тесты без этого трейта с помощью
grep, например:grep -rL 'RefreshDatabase' tests/Feature | xargs grep -l '::factory('— эта команда находит тесты, где нет трейта, но есть использование фабрик.
🔸можно расширить поиск и даже встроить такую проверку в GitHub Actions, чтобы CI падал, если в PR есть тесты без трейта, но с операциями, изменяющими БД.
В конце совет:
🔹 всегда использовать
RefreshDatabase, так как он быстрее и безопаснее других способов очистки БД;🔹 предпочитать фабрики и сидеры ручному созданию моделей;
🔹 проверять, что HTTP-тесты, создающие записи, также используют этот трейт.
🔗 Читать статью
Библиотека пхпшника
😁2
📚 Классика, которая не стареет: курс по структурам данных
Одни из легендарных лекций по структурам данных от MIT, где каждая лекция — как путешествие в глубину компьютерной науки.
Темы, которые остаются актуальными и сейчас:
➡️ Time travel — персистентные структуры данных: как «помнить прошлое», но не менять его.
➡️ Geometry — работа с многомерными данными (карты, таблицы, базы).
➡️ Dynamic optimality — идеальное дерево поиска: существует ли оно вообще?
➡️ Memory hierarchy — оптимизация работы с кэшем, даже не зная его размера.
➡️ Hashing — самая используемая структура данных в мире, и до сих пор поле активных исследований.
➡️ Integers — когда логарифм слишком медленно, а константа — возможна.
➡️ Dynamic graphs — как быстро пересчитывать граф при изменениях связей.
➡️ Strings — поиск подстрок в гигантских текстах (Google, ДНК и всё между).
➡️ Succinct structures — структуры, которые занимают почти столько же места, сколько сами данные.
🎓 Ссылка на лекции от MIT
Хочешь прокачаться в алгоритмах с практикой и поддержкой?
— Алгоритмы и структуры данных
⚡️ Сейчас действует акция –40% на курс и ещё несколько программ.
🐸 Библиотека пхпшника
Одни из легендарных лекций по структурам данных от MIT, где каждая лекция — как путешествие в глубину компьютерной науки.
Темы, которые остаются актуальными и сейчас:
🎓 Ссылка на лекции от MIT
Хочешь прокачаться в алгоритмах с практикой и поддержкой?
— Алгоритмы и структуры данных
⚡️ Сейчас действует акция –40% на курс и ещё несколько программ.
Please open Telegram to view this post
VIEW IN TELEGRAM
🎲 Простой скрипт на PHP: что будет — true или false?
🔍 На первый взгляд:
Но PHP выведет
🧠 Почему так?
В PHP есть два числовых типа: int и float (double, по стандарту IEEE-754).
Если в коде стоит очень большое целое число, которое не помещается в диапазон int (на 64-битной системе около ±9.22e18), PHP автоматически парсит его как float.
В нашем примере оба литерала слишком большие → оба превращаются в float ещё на этапе разбора кода.
float хранит числа с ~15–17 значимыми цифрами. На значениях порядка 10¹⁹ шаг между двумя смежными представленными числами (ULP) может быть около 2048!
Разница в 1 между $a и $a + 1 слишком мала, чтобы быть «видимой» в представлении float. В итоге оба числа записываются как одно и то же значение.
При строгом сравнении === PHP сравнивает тип и внутреннее двоичное представление — и они совпадают → true.
⚠️ Где это может подвести в жизни
ID из БД или API
Длинные идентификаторы (BIGINT) попадают в PHP как числа → уязвимость к потере точности.
json_decode
Без JSON_BIGINT_AS_STRING большие числа могут превратиться в float.
Ключи массивов
Если использовать очень большое число как ключ, он может оказаться float, потом приведён к int, и несколько ключей «слипнутся» в один.
Сравнения и безопасность
Два разных числа могут быть признаны равными, что приводит к неожиданному поведению.
✅ Как защититься
Передавайте идентификаторы как строки, а не числа.
При декодировании JSON используйте:
Для операций с большими числами — bcmath, gmp или аналоги:
Валидируйте входные данные: не приводите строку к int, если она вне допустимого диапазона.
На фронтенде (JavaScript) тоже осторожно: безопасная зона — до ±(2^53 − 1). Всё, что больше — отправляйте строкой.
💡 PHP «слипает» очень большие целые числа в float, и на больших значениях шаг между числами становится большим. Поэтому два разных литерала могут превратиться в одно и то же значение.
🔗 Хабр
Библиотека пхпшника
$a = 12345678901234567890;
$b = $a + 1;
var_dump($a === $b);
🔍 На первый взгляд:
$b = $a + 1 → два разных числа, значит === должен вернуть false.Но PHP выведет
true — значения «слипаются».🧠 Почему так?
В PHP есть два числовых типа: int и float (double, по стандарту IEEE-754).
Если в коде стоит очень большое целое число, которое не помещается в диапазон int (на 64-битной системе около ±9.22e18), PHP автоматически парсит его как float.
В нашем примере оба литерала слишком большие → оба превращаются в float ещё на этапе разбора кода.
float хранит числа с ~15–17 значимыми цифрами. На значениях порядка 10¹⁹ шаг между двумя смежными представленными числами (ULP) может быть около 2048!
Разница в 1 между $a и $a + 1 слишком мала, чтобы быть «видимой» в представлении float. В итоге оба числа записываются как одно и то же значение.
При строгом сравнении === PHP сравнивает тип и внутреннее двоичное представление — и они совпадают → true.
⚠️ Где это может подвести в жизни
ID из БД или API
Длинные идентификаторы (BIGINT) попадают в PHP как числа → уязвимость к потере точности.
json_decode
Без JSON_BIGINT_AS_STRING большие числа могут превратиться в float.
Ключи массивов
Если использовать очень большое число как ключ, он может оказаться float, потом приведён к int, и несколько ключей «слипнутся» в один.
Сравнения и безопасность
Два разных числа могут быть признаны равными, что приводит к неожиданному поведению.
✅ Как защититься
Передавайте идентификаторы как строки, а не числа.
При декодировании JSON используйте:
json_decode($json, false, 512, JSON_BIGINT_AS_STRING);
Для операций с большими числами — bcmath, gmp или аналоги:
bccomp("12345678901234567890", "12345678901234567899"); // -1
bcadd("99999999999999999999", "1"); // "100000000000000000000"Валидируйте входные данные: не приводите строку к int, если она вне допустимого диапазона.
На фронтенде (JavaScript) тоже осторожно: безопасная зона — до ±(2^53 − 1). Всё, что больше — отправляйте строкой.
💡 PHP «слипает» очень большие целые числа в float, и на больших значениях шаг между числами становится большим. Поэтому два разных литерала могут превратиться в одно и то же значение.
Библиотека пхпшника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27❤1