Заметки разработчика
475 subscribers
666 photos
4 videos
1.16K links
Заметки о Frontend, Backend и немного DevOps. В основном о #PHP, #Laravel, #JavaScript, #HTML, #CSS, тестировании и настройке серверов.

https://www.dev-notes.ru

@snakenf
Download Telegram
🧠 PHP 8.5: новая директива max_memory_limit

В PHP 8.5 появилась новая INI-директива max_memory_limit, которая задаёт верхний предел для memory_limit. Теперь администратор может запретить скрипту увеличивать лимит памяти выше установленного значения — даже через ini_set().

Зачем это нужно
— защита от неконтролируемого роста потребления памяти;
— удобный потолок для продакшена, Docker и shared-hosting;
— предсказуемое поведение конфигурации.

Если memory_limit пытаются поставить выше max_memory_limit или отключить (-1), PHP выдаёт предупреждение и оставляет максимально разрешённое значение.

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🚀 PHP 8.5 получает новую Curl-функцию — curl_multi_get_handles

В свежем релизе PHP 8.5 расширение Curl обзавелось полезным обновлением: теперь можно напрямую получить список всех CurlHandle, добавленных в CurlMultiHandle. Раньше для этого приходилось вручную вести массивы или использовать WeakMap.

Функция упрощает работу с множественными curl-запросами и делает мульти-обработку предсказуемее и удобнее.

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #cURL
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
👩‍💻 PHP 8.5: Intl: новый класс IntlListFormatter

Расширение Intl в PHP 8.5 добавляет новый класс IntlListFormatter. Он обеспечивает форматирование списков с учётом локализации в удобные для чтения списки "и"-списки, "или"-списки или единицы.

Новый класс IntlListFormatter следует тем же шаблонам, что и другие классы из расширения Intl; он создаётся с помощью валидной строки локали и использует данные ICU для фактического форматирования.

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #Intl
Please open Telegram to view this post
VIEW IN TELEGRAM
PHP 8.5: CLI: php --ini=diff отображает нестандартные INI директивы

В PHP 8.5 появилась полезная команда для отладки конфигурации — php --ini=diff. Она моментально показывает все INI-настройки, которые отличаются от стандартных значений по умолчанию.

🛠 Как это работает:

php --ini=diff


На выходе — список параметров, которые вы или система изменили:

Non-default INI settings:
html_errors: "1" -> "0"
max_execution_time: "30" -> "0"


🚀 Зачем это нужно:

Больше не нужно вручную сравнивать php.ini или искать изменения в phpinfo()
Идеально для отчётов об ошибках — сразу видно, какие настройки могли вызвать проблему
Работает в связке с другими CLI-опциями (-d, -c, -n)

🔙 Обратная совместимость:

В старых версиях PHP команда не сломается — просто вернёт результат как php --ini.

Отличный инструмент для всех, кто работает с настройкой PHP-серверов и отладкой окружения.

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #CLI
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
PHP 8.5: новая функция locale_is_right_to_left и метод Locale::isRightToLeft

В PHP 8.5 появилось обновление для работы с многоязычными приложениями: функция locale_is_right_to_left и метод Locale::isRightToLeft, позволяющие разработчикам автоматически определять языки с написанием справа налево, включая арабский и иврит.

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

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #Intl #Locale
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
🚀 PHP 8.5: Поддержка трассировки стека для фатальных ошибок PHP

Раньше при фатальных ошибках мы видели только строку сбоя, без понимания полного пути выполнения кода. Теперь PHP показывает полный stack trace, что значительно ускоряет отладку.

📌 Что нового:

Включено по умолчанию (можно отключить через fatal_error_backtraces = Off)
Работает с существующими директивами (display_errors, #[\SensitiveParameter])
Без проблем обратной совместимости

Пример новой трассировки:

Stack trace:
#0 file.php(...): str_repeat('A', 5242880)
#1 file.php(...): my_heavy_function()
#2 {main}


Это особенно удобно при работе с legacy-кодом и сложными цепочками вызовов в современных фреймворках.

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #Error
Please open Telegram to view this post
VIEW IN TELEGRAM
PHP 8.5: Новые функции get_exception_handler и get_error_handler

PHP 8.5 добавил две полезные функции, которых не хватало годами: get_error_handler() и get_exception_handler(). Раньше приходилось временно ставить новый обработчик, чтобы узнать текущий. Теперь легко получить текущий обработчик ошибок или исключений — без хаков и костылей.

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #Error
Please open Telegram to view this post
VIEW IN TELEGRAM
2
⚙️ PHP 8.5: Новая константа PHP_BUILD_PROVIDER

Раньше, чтобы узнать, кто собрал ваш PHP (например, Debian или Ubuntu), нужно было вызывать phpinfo(). В PHP 8.5 это можно сделать прямо из кода.

Новая глобальная константа PHP_BUILD_PROVIDER получает значение, заданное при сборке PHP. Это открывает возможности для:
Контроля версий и окружений
Точечной отладки проблем
Логирования информации о среде

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
⚙️ PHP 8.5: Новая константа PHP_BUILD_DATE

В PHP 8.5 появилась константа PHP_BUILD_DATE, которая хранит дату и время сборки PHP-бинарного файла. Ранее эту информацию можно было получить только через phpinfo(), что было неудобно из-за необходимости парсить вывод функции. Теперь данные доступны напрямую в удобном формате.

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85
Please open Telegram to view this post
VIEW IN TELEGRAM
‼️ PHP 8.5: Отказ от устаревших приведений типов (boolean, double, integer, binary)

В PHP 8.5 типы (boolean), (double), (integer) и (binary) объявлены устаревшими: при использовании этих типов теперь выводятся предупреждения E_DEPRECATED. Эти альтернативные имена использовались параллельно с каноническими (bool), (float), (int) и (string), но в PHP 9.0 они будут удалены. Рассмотрим, почему принято такое решение, как это затронет ваш код и как подготовиться к переходу.

Пример проблемного кода:
<?php

function test(integer $value): double {}
// Warning: "double" will be interpreted as a class name...


🛠 С PHP 8.5 нужно обновить код:
(integer)(int)
(double)(float)
(boolean)(bool)
(binary)(string)

Иначе будут предупреждения E_DEPRECATED, а в PHP 9.0 — ошибки!

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #Deprecated #Deprecation
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
‼️ PHP 8.5: Функция mysqli_execute объявлена устаревшей

В PHP 8.5 функция mysqli_execute объявлена устаревшей. Узнайте, как правильно заменить её на mysqli_stmt_execute и обеспечить совместимость кода с будущими версиями PHP.

Что делать?

Заменить на mysqli_stmt_execute — обратно совместимо
Или использовать mysqli_execute_query для PHP 8.2+

В статье:

Причины объявления mysqli_execute устаревшей
Конкретные примеры замены кода
Пошаговый план миграции
Ответы на частые вопросы

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #Deprecated #Deprecation
Please open Telegram to view this post
VIEW IN TELEGRAM
🔄 Обновлена статья по работе с NULL в SQL!

Актуализирован материал, посвящённый работе с NULL в SQL — от основ до продвинутых функций и лучших практик.

Что нового:

Подробнее про COALESCE, IFNULL и NULLIF с примерами
Особенности NULL в JOIN и агрегирующих функциях
Рекомендации по проектированию и оптимизации запросов

🖥 Читать статью

📱 @dev_notes_ru

#SQL #NULL #COALESCE
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🚀 PHP 8.5: `curl_close()` и `curl_share_close()` объявлены устаревшими

Если ваши логи в PHP 8.5 заполонили предупреждения об устаревании curl_close() — не игнорируйте их. Это не просто формальность. Эти функции стали полностью бесполезными ещё с PHP 8.0, и их вызов теперь — лишь шум в логах.

Всё потому, что в PHP 8.0 cURL-дескрипторы превратились в полноценные объекты, которыми теперь управляет сборщик мусора. А в PHP 8.5 от этих пустых функций-«пустышек» окончательно решили избавиться.

📌 Что нужно знать:
Замените curl_close() на unset($ch)
Для совместимости с PHP < 8.0 используйте условные проверки
curl_multi_close() остаётся рабочей

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #cURL
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 PHP 8.5: Функция xml_parser_free объявлена устаревшей

С выходом PHP 8.5 ещё один устаревший элемент покидает язык — функция xml_parser_free() теперь помечена как deprecated. Это логичное продолжение перехода от ресурсов к объектам, начатого в PHP 8.0, где XML-парсер стал объектом и не требует ручного освобождения.

В статье разбирается:

Почему функция перестала быть нужной
Как правильно удалить её вызовы без нарушения обратной совместимости
Какие альтернативные подходы использовать в legacy-проектах

Если вы работаете с XML-парсингом в PHP, рекомендуем ознакомиться с материалом для обновления вашего кодовой базы.

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #XMLParser
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 PHP 8.5: Функция socket_set_timeout объявлена устаревшей

В PHP 8.5 функция socket_set_timeout официально объявлена устаревшей (deprecated).

Не волнуйтесь, замена простая и прямая — используйте stream_set_timeout. Параметры и поведение идентичны, обратная совместимость полная.

Что нужно сделать?
Найти в коде все socket_set_timeout (через grep или IDE)
Заменить на stream_set_timeout
Избавиться от будущих предупреждений

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #Deprecated
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 PHP 8.5: Вывод из обработчиков буфера вывода объявлен устаревшим

Начиная с PHP 8.5 вывод из обработчиков буфера вывода объявлен устаревшим. При обнаружении вывода из обработчика PHP сгенерирует предупреждение E_DEPRECATED, хотя сам вывод по-прежнему будет подавлен. В PHP 9.0 это приведёт к фатальной ошибке (Fatal Error), что прервёт выполнение скрипта.

Что делать?

Проверить все обработчики на наличие echo, print или `include`содержащих вывод
Весь вывод формировать через возвращаемую строку
При необходимости использовать внутреннюю буферизацию (ob_start внутри обработчика)

Подробное руководство по аудиту и рефакторингу с живыми примерами — в статье.

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #Deprecated
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
🚀 PHP 8.5: Все константы MHASH_* объявлены устаревшими

Знакомы с функциями mhash() и константами вроде MHASH_SHA1? В PHP 8.5 они окончательно помечены как устаревшие. Что это значит для ваших проектов? 👇

• Все константы MHASH_* теперь выводят предупреждение об устаревании.
• Прямая таблица замен на строковые алгоритмы для hash().
• Инструменты для автоматической миграции: PHPStan, Rector.

Пора обновлять код, пока изменения не стали критичными.

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #Hash #MHash #Deprecated
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🚀 PHP 8.5: CLI/CGI: Удалён параметр -z / --zend-extension

PHP 8.5 оба параметра -z и --zend-extension окончательно удалены. Это изменение — финальный шаг в устранении давно сломанной функциональности: опция -z не работала корректно для загрузки Zend-расширений как минимум на протяжении последних нескольких основных релизов PHP (например, в ветках 8.x и 7.x), а её реализация в CLI/CGI SAPI всегда была неполноценной.

• Опция -z была сломана годами и окончательно удалена в PHP 8.5.
• Если она использовалась формально — просто удалите её.
• Если нужно загрузить расширение — используйте -d zend_extension=....

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
👩‍💻 Хуки свойств в Laravel 12: Прощай, `getFullNameAttribute()`

10 лет мы использовали геттеры и сеттеры в виде методов, мирясь с ограничениями автодополнения в IDE. С выходом PHP 8.4 и Laravel 12 появился более элегантный и строгий способ — хуки свойств (Property Hooks).

Теперь логику можно описывать прямо в теле свойства:

public string $fullName {
get => "{$this->first_name} {$this->last_name}";
set(string $value) => [
$this->first_name,
$this->last_name
] = explode(' ', $value, 2);
}


Ключевые преимущества


Встроенная типизация. Явное указание типа `string` гарантирует безопасность на уровне языка. Больше не нужны `@property`-аннотации для подсказок IDE.
Идеальное автодополнение. Свойства «видны» с первого обращения, IDE понимает их структуру без дополнительных плагинов.
Чистота моделей. Код становится декларативным и компактным, логика сосредоточена в одном месте.
Прозрачность. Меньше «магии» фреймворка — проще читать и отлаживать.

Идеальные сценарии для использования


Виртуальные (вычисляемые) атрибуты: `full_name`, `formatted_price`, `is_published`.
Мгновенная нормализация данных: приведение к нижнему регистру, триммирование пробелов при записи.
Простые вычисления без кэширования: когда нет необходимости хранить результат в БД.

⚠️ Важно: Класс `Attribute` и метод `Attribute::make()` остаются для сложных сценариев с кэшированием, зависимостями и т.п. Но для большинства простых преобразований хуки свойств — более прямой и производительный выбор.

Итог


2026 год на дворе. Пора писать модели на современном PHP, используя его синтаксис, а не обходные пути ранних версий Laravel.

📱 @dev_notes_ru

#PHP #Laravel #PropertyHooks
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
👩‍💻 Arr::onlyValues() & exceptValues() — фильтрация по значениям в Laravel 12.46

Хелперы Arr::only() и Arr::except() отлично фильтруют массивы по ключам. А что, если нужно отфильтровать именно по значениям?

Раньше приходилось комбинировать array_filter() с in_array() и писать callback-функции. В Laravel 12.46.0 появились два новых метода, которые делают это декларативно.

Arr::onlyValues() — оставляет только совпадающие значения:

$roles = ['admin', 'editor', 'viewer', 'guest'];
Arr::onlyValues($roles, ['admin', 'editor']);
// Результат: [0 => 'admin', 1 => 'editor']


Arr::exceptValues() — удаляет указанные значения:

$statuses = ['pending', 'completed', 'failed', 'shipped'];
Arr::exceptValues($statuses, ['failed', 'completed']);
// Результат: [0 => 'pending', 3 => 'shipped'] (ключи сохраняются!)


Строгий режим для смешанных типов:
Необязательный третий параметр strict: true включает проверку типа (===).

$mixed = [1, '1', 2, '2', 3];
Arr::onlyValues($mixed, [1, 2, 3], strict: true);
// Результат: [0 => 1, 2 => 2, 4 => 3] (только integer)


Где это удобно?
→ Фильтрация списков: статусы, роли, категории.
→ Очистка ввода: разрешённые/запрещённые значения.
→ Работа с конфигурациями и перечислениями (enum-like arrays).

Небольшое, но очень приятное дополнение для более чистого и выразительного кода.

📱 @dev_notes_ru

#PHP #Laravel12
Please open Telegram to view this post
VIEW IN TELEGRAM