PHP Academy
9.18K subscribers
173 photos
36 videos
325 links
@workakkk - с вопросами
Download Telegram
🔥 Как избежать проблем с isset() и empty() в PHP?

Сегодня разберём две часто используемые функции в PHP — isset() и empty(), которые могут вести себя не так, как вы ожидаете.

📌 isset()
Функция isset($var) проверяет, была ли переменная установлена и не равна ли она null.
❗ Пример подвоха:

$var = null;
var_dump(isset($var)); // false

Если переменной вообще нет в коде — тоже будет false.

📌 empty()
Функция empty($var) проверяет, считается ли переменная "пустой".
❗ Пустыми считаются:
- "" (пустая строка)
- 0 (число)
- "0" (строка с нулём)
- null
- false
- [] (пустой массив)

Пример:

$var = "0";
var_dump(empty($var)); // true, хотя строка не null

⚠️ Ошибка: проверка if (!isset($var) || empty($var)) может привести к неожиданному результату.

🔥 Лучший подход?
Используйте строгие проверки:

if ($var === null) { /* Переменная null */ }
if ($var === '') { /* Пустая строка */ }
if ($var === 0) { /* Число 0 */ }

Если проверяете массивы, то:

if (count($var) === 0) { /* Массив пуст */ }


Вывод: не злоупотребляйте isset() и empty(), а проверяйте переменные строго!
❤6👍6👎4🔥1🥰1
🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку

В IT прокачивается тот, кто каждый день видит сильные идеи, новые инструменты, реальные задачи, вакансии и разборы.

Окружение решает больше, чем кажется.

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

AI: t.iss.one/ai_machinelearning_big_data
Python: t.iss.one/pythonl
Linux: t.iss.one/linuxacademiya
Хакинг: t.iss.one/linuxkalii
DevOps: t.iss.one/DevOPSitsec
Docker: t.iss.one/DevopsDocker
Golang: t.iss.one/Golang_google
Rust: t.iss.one/rust_code
C++: t.iss.one/cpluspluc
C#: t.iss.one/csharp_1001_notes
Java: t.iss.one/java_library
JavaScript: t.iss.one/javascriptv
React: t.iss.one/react_tg
Frontend: t.iss.one/front
PHP: t.iss.one/phpshka
Android: t.iss.one/android_its
Мобильная разработка: t.iss.one/mobdevelop
Базы данных: t.iss.one/sqlhub
Data Science: t.iss.one/data_analysis_ml
Big Data: t.iss.one/bigdatai
Математика: t.iss.one/data_math
Физика: t.iss.one/fizmat
Kubernetes: t.iss.one/kubernetc
GameDev: https://t.iss.one/gamedev
Haskell: t.iss.one/haskell_tg

Собеседования и карьера:

DS собеседования: t.iss.one/machinelearning_interview
Python собеседования: t.iss.one/python_job_interview

Папка с вакансиями: t.iss.one/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.iss.one/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.iss.one/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.iss.one/addlist/2Ls-snqEeytkMDgy
Папка Frontend: https://t.iss.one/addlist/mzMMG3RPZhY2M2Iy

Полезное сверху:

ИТ-мемы: t.iss.one/memes_prog
Английский для программистов: t.iss.one/english_forprogrammers
ИИ и технологии: t.iss.one/vistehno
954 ГБ open-source курсов: @courses
ИТ-книги бесплатно: https://t.iss.one/addlist/BkskQciUW_FhNjEy

Max Ai: https://max.ru/ai_machinelearning_big_data
Max python: https://max.ru/pythonl
ТЕХНО: https://max.ru/vistehno
Max Go: https://max.ru/Golang_google
Max Linux: https://max.ru/linuxkalii
Devops: https://max.ru/DevOPSitsec
C#: https://max.ru/csharp_ci
C++: https://max.ru/cpluspluc
SQL: https://max.ru/sqlhub
Java: https://max.ru/javatg

Подписывайся на нужные направления и собирай себе ленту, которая реально двигает вперёд.

Пока кто-то листает шум, ты будешь видеть инструменты, задачи и идеи, которые помогают расти в профессии.
🤮3❤1👍1🔥1
Сегодня покажу вам простую, но мощную технику, которая может прокачать ваш PHP-код — Value Object вместо простых типов.

Мы часто передаём параметры как string, int, array. Всё просто и понятно. Но как только бизнес-логика усложняется — типы начинают нас подводить.

Допустим, у вас есть метод:


function sendSms(string $phoneNumber, string $message): void


А теперь скажите честно — сколько раз вы ловили себя на том, что phoneNumber передаётся в неправильном формате? Или вовсе пустым? Или из другой страны, а вы это не предусмотрели?

Вот тут и приходят на помощь Value Object'ы:


final class PhoneNumber
{
public function __construct(private string $number)
{
if (!preg_match('/^\+7\d{10}$/', $number)) {
throw new InvalidArgumentException('Invalid phone number');
}
}

public function value(): string
{
return $this->number;
}
}


Теперь ваш метод будет выглядеть так:


function sendSms(PhoneNumber $phoneNumber, Message $message): void


Что мы получаем:
- Валидность данных гарантируется на этапе создания объекта.
- Код становится самодокументируемым — не нужно читать описание, чтобы понять, что именно сюда передаётся.
- IDE и статическая проверка типа не дадут случайно передать email вместо phone.

Да, это чуть больше кода. Но это тот случай, когда "больше" — значит надёжнее.
👍17🔥1
Сегодня покажу вам простой, но очень удобный приём, который помогает наводить порядок в больших PHP-проектах — использование кастомных коллекций вместо массивов.

Если вы когда-нибудь передавали в методы или возвращали из них массивы с объектами, то наверняка сталкивались с ситуацией, когда непонятно, что в массиве лежит. А потом кто-нибудь передал туда строку или null — и привет, баги.

Я стал использовать свои классы коллекций. Простой пример:


class UserCollection
{
/** @var User[] */
private array $users = [];

public function __construct(array $users = [])
{
foreach ($users as $user) {
$this->add($user);
}
}

public function add(User $user): void
{
$this->users[] = $user;
}

public function all(): array
{
return $this->users;
}

public function filterByActive(): self
{
return new self(array_filter($this->users, fn(User $u) => $u->isActive()));
}

// и так далее
}


Теперь везде, где раньше был User[], я работаю с UserCollection. Это сразу даёт:

- типизацию (и защиту от мусора),
- автодополнение в IDE,
- методы прямо в коллекции (например, filterByActive, sortByName, first() и т.д.),
- чище и понятнее сигнатуры методов.

Это похоже на коллекции из Laravel, но я использую это везде, даже в маленьких проектах без фреймворков. Такие объекты делают код чище, устойчивее и легче читаемым.

Попробуйте в одном из ваших проектов заменить массивы объектов на такие коллекции — и вы удивитесь, как стало лучше.
👍14❤3
Есть возможность поработать на Кипре в одной из самых крупных фантех компаний с говорящим названием — Stripchat 😏

Нанимают senior-инженеров в направлениях: Backend, Frontend и QA.

Как вы понимаете, продукт востребованный, с миллионами активных пользователей.

Задачи: проектирование сервисов, масштабирование платформы, решение ежедневных хайлоад-задач. 200k+ RPS, распределённые системы, event-driven архитектура (PHP, Go).

Обещают полную релокацию на Кипр, EU-контракт, жилье на первое время.

Узнать детали и откликнуться можно тут
👍2
Сегодня я покажу вам простой, но мощный способ, как ускорить отладку в Laravel при работе с большим количеством логики в контроллерах и сервисах.

🔍 Ловим баги быстрее с помощью ray() от Spatie

Обычно мы используем dd() или dump() в Laravel, чтобы посмотреть, что творится с переменными. Но как только проект становится крупнее — эти методы начинают мешать, особенно когда нужно отслеживать несколько значений в разных местах.

Спасает Ray — инструмент от Spatie, который интегрируется с Laravel и выводит отладочную информацию в отдельное десктопное приложение.

Пример:


ray($user);
ray($order)->blue();
ray()->showQueries();


Ты можешь:
- выводить переменные без прерывания скрипта;
- смотреть SQL-запросы в реальном времени;
- использовать цветовые метки, чтобы различать вывод из разных участков кода.

⚙️ Установка


composer require spatie/laravel-ray --dev


И по желанию установить десктоп-приложение с сайта Spatie.

В config/ray.php можно кастомизировать поведение: включать Ray только на dev-среде, логировать только определённые запросы и т.д.

🧠 Совет от себя

Ray особенно хорошо заходит, когда работаешь в команде — ты можешь добавить временный ray()-лог, не ломая исполнение и не мешая другим.
Сегодня я покажу вам, как удобно логировать в Laravel, не засоряя код и не превращая проект в болото из Log::info() на каждом шагу.

💡 Используем каналы логирования правильно

Laravel предоставляет мощную систему логирования на базе Monolog. Но часто мы ограничиваемся дефолтным логом. А зря.

Например, создаём отдельный канал для логов оплаты:


// config/logging.php
'channels' => [
'payment' => [
'driver' => 'single',
'path' => storage_path('logs/payment.log'),
'level' => 'info',
],
],


Теперь в нужном месте можно писать:


Log::channel('payment')->info('Платёж прошёл', ['user_id' => $user->id, 'amount' => $amount]);


И всё — никакой путаницы. В laravel.log остаётся только то, что важно для всего проекта, а логи оплаты — отдельно. Можно и в телеграм скидывать, если настроить webhook.

👀 Бонус: helper-функция

Чтобы писать меньше:


if (!function_exists('payment_log')) {
function payment_log($message, array $context = []) {
\Log::channel('payment')->info($message, $context);
}
}


Теперь вызываем везде просто payment_log('Платёж принят').

Пишите в комментах, какие каналы логирования вы используете и куда пишете — в файл, телегу или Sentry?
👍8😁4🔥2
🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку

Окружение решает больше, чем кажется.

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

AI: t.iss.one/ai_machinelearning_big_data
Python: t.iss.one/pythonl
Linux: t.iss.one/linuxacademiya
Хакинг: t.iss.one/linuxkalii
DevOps: t.iss.one/DevOPSitsec
Docker: https://t.iss.one/+90Z5TAyfuNU5YmRi
Golang: t.iss.one/Golang_google
Rust: t.iss.one/rust_code
C++: t.iss.one/cpluspluc
C#: t.iss.one/csharp_1001_notes
Java: t.iss.one/javatg
JavaScript: t.iss.one/javascriptv
React: t.iss.one/react_tg
Frontend: t.iss.one/front
PHP: t.iss.one/phpshka
Android: t.iss.one/android_its
Мобильная разработка: t.iss.one/mobdevelop
Базы данных: t.iss.one/sqlhub
Data Science: t.iss.one/data_analysis_ml
Big Data: t.iss.one/bigdatai
Математика: t.iss.one/data_math
Физика: https://t.iss.one/+S4hinvO3QI43ZjNi
Kubernetes: t.iss.one/kubernetc
GameDev: https://t.iss.one/gamedev
Haskell: t.iss.one/haskell_tg

Собеседования и карьера:

DS собеседования: t.iss.one/machinelearning_interview
Python собеседования: t.iss.one/python_job_interview

Папка с вакансиями: t.iss.one/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.iss.one/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.iss.one/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.iss.one/addlist/2Ls-snqEeytkMDgy
Папка Frontend: https://t.iss.one/addlist/mzMMG3RPZhY2M2Iy

Полезное сверху:

ИТ-мемы: t.iss.one/memes_prog
Английский для программистов: t.iss.one/english_forprogrammers
ИИ и технологии: t.iss.one/vistehno
954 ГБ open-source курсов: https://t.iss.one/+rKBQEMccAA01MTcy
ИТ-книги бесплатно: https://t.iss.one/addlist/BkskQciUW_FhNjEy

Max Ai: https://max.ru/ai_machinelearning_big_data
Max python: https://max.ru/pythonl
ТЕХНО: https://max.ru/vistehno
Max Go: https://max.ru/Golang_google
Max Linux: https://max.ru/linuxkalii
Devops: https://max.ru/DevOPSitsec
C#: https://max.ru/csharp_ci
C++: https://max.ru/cpluspluc
SQL: https://max.ru/sqlhub
Java: https://max.ru/javatg

Подписывайся на нужные направления и собирай себе ленту, которая реально двигает вперёд.
Сегодня хочу рассказать вам про одну ошибку, которую я часто встречаю у начинающих PHP-разработчиков — неправильную работу с датами и временем.

Когда вы используете функции вроде date(), strtotime(), time() напрямую без явной установки временной зоны (timezone), ваш код может начать вести себя непредсказуемо. Особенно если ваш проект запущен на серверах в разных регионах.

Чтобы избежать проблем:
- Всегда задавайте временную зону явно через date_default_timezone_set('Your/Timezone'); в начале вашего приложения.
- Или лучше используйте объекты DateTime и DateTimeZone, они гораздо удобнее для работы с временными зонами и манипуляциями с датами.

Пример хорошего подхода:
$date = new DateTime('now', new DateTimeZone('Europe/Moscow'));
echo $date->format('Y-m-d H:i:s');
И еще одна рекомендация — всегда храните даты в базе данных в формате UTC, а уже при выводе преобразовывайте их в нужную временную зону для пользователя.

Небольшая дисциплина в работе с временем сэкономит вам кучу нервов в будущем. Проверено на реальных проектах!
👍16❤2👎1
💡Совет по Laravel

Знаешь ли ты, что можно выбрасывать исключения условно всего в одну строку с помощью throw_if() — идеально для лаконичного кода в контроллерах и сервисах.
🤮17👍6🔥1🤡1
🐘 Что нового в PHP 8.6

Релиз запланирован на 19 ноября 2026 года, сейчас версия проходит бета-тестирование.

Из интересного:

* Частичное применение функций — можно заранее передать часть аргументов, оставив остальные на потом:


$makeSlug = str_replace(' ', '-', ?);
echo $makeSlug('Hello World'); // Hello-World


* `clamp()` — ограничивает значение заданным диапазоном. Например, clamp(150, min: 0, max: 100) вернёт 100.
* `Time\Duration` — класс для длительности с наносекундной точностью, арифметикой и сравнением.
* Значения по умолчанию для `readonly`-свойств — без возможности менять их после инициализации.
* Новый Polling API — единый интерфейс к механизмам вроде epoll и kqueue для циклов событий.
* Улучшенная обработка ошибок потоков — можно выбирать предупреждения, исключения или тихий режим.

Разбор с примерами — https://laravel-news.com/php-8-6

RFC частичного применения — https://wiki.php.net/rfc/partial_function_application_v2
❤7👍3🔥1🥰1🎉1
🤖 ИИ-агенты заходят непосредственно в workflow разработки как цифровые сотрудники
В SourceCraft агент получает задачу прямо из GitLab и работает с ней как отдельный участник команды: выполняет поручение под собственной учётной записью и отправляет результат на code review.
Причём workflow не обрывается, если контекста недостаточно. Агент может сам запросить у разработчиков дополнительные данные или согласование и продолжить работу после ответа.
Для команд также доступно подключение собственных агентов — в том числе созданных в Yandex AI Studio.
❤3👍3🔥1👏1🥱1
Выбора нет )
💯17🥰8😁8🤩2❤1👏1
💡 Совет для Laravel‑разработчиков

Используйте Crypt facade — он уже есть в Laravel:

- Работает на вашем APP_KEY
- Шифрует данные через AES‑256‑CBC
- Защищает от подделки (MAC) 🔐

Храните API‑токены, пароли и секреты безопасно — прямо из коробки.
❤2🤔1
💡 Совет для Laravel‑разработчиков

Используйте Crypt facade — он уже есть в Laravel:

- Работает на вашем APP_KEY
- Шифрует данные через AES‑256‑CBC
- Защищает от подделки (MAC) 🔐

Храните API‑токены, пароли и секреты безопасно — прямо из коробки.
👍5
Уязвимость в PHP, потенциально позволяющая скомпрометировать любой PHP-сайт

Разработчики PHP анонсировали публикации сегодня в 17:00 (MSK) экстренных корректирующих выпусков (8.5.12, 8.4.27, 8.3.36 и 8.2.35), в которых будут устранены две критические уязвимости. Всем администраторам серверов с PHP рекомендовано незамедлительно установить исправления на своих системах, сразу после их появления. Официально детали будут раскрыты только после появления исправлений, но судя по появившейся в открытом доступе информации, речь про уязвимости CVE-2026-109618 и CVE-2026-109619, потенциально позволяющие удалённо выполнить свой код на любом сервере, выполняющем PHP-скрипты. Проблема проявляется во всех версиях, начиная с PHP 5.4.

Полный текст:
https://opennet.ru/66516/
https://opennet.iss.one/66516/
👍7❤2😁1🤣1
Forwarded from Machinelearning
Media is too big
VIEW IN TELEGRAM
✔️ В PHP устранили критическую уязвимость, найденную ИИ-моделями

ИБ-специалисты в программе Patch the Planet нашли серьёзную брешь в кодовой базе PHP, задевающую все популярные CMS, которая существовала более десяти лет. На момент публикации команда PHP выпустила экстренные обновления безопасности.

На устранение ушло два месяца и пять этапов согласований между мейнтейнерами языка, Calif, Wiz, Cloudflare, CISA и Белым домом, и OpenAI предлагает закрепить эту схему типовым регламентом для раскрытия найденных ИИ проблем безопасности.

Разработчикам и администраторам советуют проверить серверы, для аудита запущенных установок PHP на GitHub выложен диагностический инструмент.
openai.com

✔️ ElevenLabs выпустила сквозную голосовую модель Eleven Realtime

Модель ведёт двусторонний разговор в реальном времени и вышла в версиях Mini для простых сценариев и Max для сложных диалогов с вызовом инструментов.

Заявлена поддержка больше 90 языков и каталог на 17 тысяч голосов. Перебивания, паузы и наложение голосов модель разбирает сама, так что отдельные модели распознавания и синтеза речи не нужны.

В бенчмарке Artificial Analysis старшая Max дала точность рассуждений 98,8% при средней задержке ответа 0,57 секунды, тогда как Qwen Audio 3.0 Realtime Plus набрала близкие 99,2%, но отвечала за 1,54 секунды.

Доступ открыт через ElevenAgents и Realtime API, причём транспортный уровень совместим со спецификацией WebSocket от OpenAI, поэтому готовые клиентские SDK работают без переписывания кода.
elevenlabs.io

✔️ Intel и AMD упростят разработку ИИ на процессорах x86

Компании договорились свести наработки по ускорению PyTorch в открытую библиотеку глубокого обучения oneDNN, которую развивают под эгидой Unified Acceleration Foundation.

Так они рассчитывают убрать разнобой в программной части экосистемы x86, а саму oneDNN признали библиотекой по умолчанию для оптимизации ИИ-задач на процессорах обоих производителей. AMD уже переносит наработки из ZenDNN в кодовую базу oneDNN и входит в управляющий комитет.

Кроме унификации нынешних средств компании проектируют набор инструкций следующего поколения AI Compute Extensions для аппаратного ускорения матричного умножения, его поддержку в PyTorch тоже обещают через oneDNN. 
intel.com

✔️ Google и PyTorch открыли код TorchTPU

Набор инструментов для запуска конвейеров PyTorch на тензорных процессорах опубликован в открытом доступе, и это переводит TPU в разряд полноправных ускорителей наравне с процессорами и видеокартами.

Существующий код запускается с минимальными правками, разработчикам доступны режим отладки, компиляция и примитивы распределённых вычислений.

Инициативу поддержали ключевые проекты открытого ИИ - в transformers добавили выгрузку моделей, а движки vLLM и SGLang получили бэкенды для TPU с непрерывной пакетной обработкой и ядрами Pallas. 
google.com

✔️ Uber чистит свои репозитории от мёртвого кода агентами

Внутренняя платформа AutoClean непрерывно убирает устаревшие фича-флаги и мёртвый код, с её помощью уже вычищено 16 тысяч флагов и больше миллиона строк.

Агент разбирает контекст и цепочки вызовов, а точечную булеву алгебру и упрощение условий отдаёт движку PolyglotPiranha через протокол MCP, упавшие в CI тесты правят агенты без прав на продуктовый код.

Готовые патчи проходят многоступенчатую проверку, где параллельные агенты смотрят, сохранена ли семантика программы, держится ли фокус строго на целевом флаге и нет ли посторонних правок.

При расхождениях патч отбрасывается сам, а прошедшие проверку задачи уходят инженерам на окончательное утверждение. 
uber.com


@ai_machinelearning_big_data

#news #ai #ml
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4💋2
Для уязвимостей PHP2Shell анонсирован первый эксплоит, обходящий рандомизацию адресов

Исследователи из компании VulnCheck заявили о получении первого эксплоита для уязвимости PHP2Shell (CVE-2026-109618б), обходящего механизм рандомизации адресов (ASLR) на системах x86-64 с типовой конфигурацией PHP. Эксплоит позволяет атаковать системы с PHP 8.4.10-8.4.26 в конфигурации по умолчанию. Ранее трудность определения раскладки памяти в модуле mod_php мешала реализации эксплоита, позволяющего добиться выполнения кода на реальных системах. Для обхода ASLR в эксплоите задействована утечка информации об адресах в коде отображения информации об ошибках.

Полный текст:
https://opennet.ru/66529/
https://opennet.iss.one/66529/
👍3❤2❤‍🔥1
Ещё одна уязвимость в PHP, в редких конфигурациях позволяющая удалённо выполнить код

Разработчики проекта PHP предупредили о выявлении ещё одной уязвимости (CVE-2026-115560), которая потенциально может использоваться для удалённого выполнения кода на сервере при определённом редком сочетании нестандартных настроек (не в конфигурации по умолчанию) и выполняемого PHP-кода. Подробности о уязвимости намерены опубликовать после готовности очередных корректирующих выпусков PHP.

Полный текст:
https://opennet.ru/66534/
https://opennet.iss.one/66534/
❤3👍1
😁9❤5