PHP 8.5: CLI:
В PHP 8.5 появилась полезная команда для отладки конфигурации —
🛠 Как это работает:
На выходе — список параметров, которые вы или система изменили:
🚀 Зачем это нужно:
✅ Больше не нужно вручную сравнивать
✅ Идеально для отчётов об ошибках — сразу видно, какие настройки могли вызвать проблему
✅ Работает в связке с другими CLI-опциями (
🔙 Обратная совместимость:
В старых версиях PHP команда не сломается — просто вернёт результат как
Отличный инструмент для всех, кто работает с настройкой PHP-серверов и отладкой окружения.
🖥 Читать статью
📱 @dev_notes_ru
#PHP #PHP85 #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()-d, -c, -n)🔙 Обратная совместимость:
В старых версиях PHP команда не сломается — просто вернёт результат как
php --ini.Отличный инструмент для всех, кто работает с настройкой PHP-серверов и отладкой окружения.
#PHP #PHP85 #CLI
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
PHP 8.5: новая функция
В PHP 8.5 появилось обновление для работы с многоязычными приложениями: функция
Эти инструменты значительно упрощают локализацию приложений и обеспечивают корректное отображение текста на языках с RTL написанием.
🖥 Читать статью
📱 @dev_notes_ru
#PHP #PHP85 #Intl #Locale
locale_is_right_to_left и метод Locale::isRightToLeftВ PHP 8.5 появилось обновление для работы с многоязычными приложениями: функция
locale_is_right_to_left и метод Locale::isRightToLeft, позволяющие разработчикам автоматически определять языки с написанием справа налево, включая арабский и иврит. Эти инструменты значительно упрощают локализацию приложений и обеспечивают корректное отображение текста на языках с RTL написанием.
#PHP #PHP85 #Intl #Locale
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
🚀 PHP 8.5: Поддержка трассировки стека для фатальных ошибок PHP
Раньше при фатальных ошибках мы видели только строку сбоя, без понимания полного пути выполнения кода. Теперь PHP показывает полный stack trace, что значительно ускоряет отладку.
📌 Что нового:
✅ Включено по умолчанию (можно отключить через
✅ Работает с существующими директивами (
✅ Без проблем обратной совместимости
Пример новой трассировки:
Это особенно удобно при работе с legacy-кодом и сложными цепочками вызовов в современных фреймворках.
🖥 Читать статью
📱 @dev_notes_ru
#PHP #PHP85 #Error
Раньше при фатальных ошибках мы видели только строку сбоя, без понимания полного пути выполнения кода. Теперь 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-кодом и сложными цепочками вызовов в современных фреймворках.
#PHP #PHP85 #Error
Please open Telegram to view this post
VIEW IN TELEGRAM
PHP 8.5: Новые функции
PHP 8.5 добавил две полезные функции, которых не хватало годами:
🖥 Читать статью
📱 @dev_notes_ru
#PHP #PHP85 #Error
get_exception_handler и get_error_handlerPHP 8.5 добавил две полезные функции, которых не хватало годами:
get_error_handler() и get_exception_handler(). Раньше приходилось временно ставить новый обработчик, чтобы узнать текущий. Теперь легко получить текущий обработчик ошибок или исключений — без хаков и костылей.#PHP #PHP85 #Error
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
PHP_BUILD_PROVIDERРаньше, чтобы узнать, кто собрал ваш PHP (например, Debian или Ubuntu), нужно было вызывать
phpinfo(). В PHP 8.5 это можно сделать прямо из кода.Новая глобальная константа
PHP_BUILD_PROVIDER получает значение, заданное при сборке PHP. Это открывает возможности для:#PHP #PHP85
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
PHP_BUILD_DATEВ PHP 8.5 появилась константа
PHP_BUILD_DATE, которая хранит дату и время сборки PHP-бинарного файла. Ранее эту информацию можно было получить только через phpinfo(), что было неудобно из-за необходимости парсить вывод функции. Теперь данные доступны напрямую в удобном формате.#PHP #PHP85
Please open Telegram to view this post
VIEW IN TELEGRAM
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...
(integer) → (int)(double) → (float) (boolean) → (bool)(binary) → (string)Иначе будут предупреждения
E_DEPRECATED, а в PHP 9.0 — ошибки!#PHP #PHP85 #Deprecated #Deprecation
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
mysqli_execute объявлена устаревшейВ PHP 8.5 функция
mysqli_execute объявлена устаревшей. Узнайте, как правильно заменить её на mysqli_stmt_execute и обеспечить совместимость кода с будущими версиями PHP.Что делать?
mysqli_stmt_execute — обратно совместимоmysqli_execute_query для PHP 8.2+В статье:
mysqli_execute устаревшей#PHP #PHP85 #Deprecated #Deprecation
Please open Telegram to view this post
VIEW IN TELEGRAM
NULL в SQL!Актуализирован материал, посвящённый работе с
NULL в SQL — от основ до продвинутых функций и лучших практик.✅ Что нового:
COALESCE, IFNULL и NULLIF с примерамиNULL в JOIN и агрегирующих функциях#SQL #NULL #COALESCE
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Если ваши логи в PHP 8.5 заполонили предупреждения об устаревании
curl_close() — не игнорируйте их. Это не просто формальность. Эти функции стали полностью бесполезными ещё с PHP 8.0, и их вызов теперь — лишь шум в логах.Всё потому, что в PHP 8.0 cURL-дескрипторы превратились в полноценные объекты, которыми теперь управляет сборщик мусора. А в PHP 8.5 от этих пустых функций-«пустышек» окончательно решили избавиться.
📌 Что нужно знать:
curl_close() на unset($ch)curl_multi_close() остаётся рабочей#PHP #PHP85 #cURL
Please open Telegram to view this post
VIEW IN TELEGRAM
xml_parser_free объявлена устаревшейС выходом PHP 8.5 ещё один устаревший элемент покидает язык — функция
xml_parser_free() теперь помечена как deprecated. Это логичное продолжение перехода от ресурсов к объектам, начатого в PHP 8.0, где XML-парсер стал объектом и не требует ручного освобождения.В статье разбирается:
Если вы работаете с XML-парсингом в PHP, рекомендуем ознакомиться с материалом для обновления вашего кодовой базы.
#PHP #PHP85 #XMLParser
Please open Telegram to view this post
VIEW IN TELEGRAM
socket_set_timeout объявлена устаревшейВ PHP 8.5 функция
socket_set_timeout официально объявлена устаревшей (deprecated).Не волнуйтесь, замена простая и прямая — используйте
stream_set_timeout. Параметры и поведение идентичны, обратная совместимость полная.Что нужно сделать?
socket_set_timeout (через grep или IDE)stream_set_timeout#PHP #PHP85 #Deprecated
Please open Telegram to view this post
VIEW IN TELEGRAM
Начиная с PHP 8.5 вывод из обработчиков буфера вывода объявлен устаревшим. При обнаружении вывода из обработчика PHP сгенерирует предупреждение
E_DEPRECATED, хотя сам вывод по-прежнему будет подавлен. В PHP 9.0 это приведёт к фатальной ошибке (Fatal Error), что прервёт выполнение скрипта.Что делать?
echo, print или `include`содержащих выводob_start внутри обработчика)Подробное руководство по аудиту и рефакторингу с живыми примерами — в статье.
#PHP #PHP85 #Deprecated
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
MHASH_* объявлены устаревшимиЗнакомы с функциями
mhash() и константами вроде MHASH_SHA1? В PHP 8.5 они окончательно помечены как устаревшие. Что это значит для ваших проектов? 👇• Все константы
MHASH_* теперь выводят предупреждение об устаревании.• Прямая таблица замен на строковые алгоритмы для
hash().• Инструменты для автоматической миграции: PHPStan, Rector.
Пора обновлять код, пока изменения не стали критичными.
#PHP #PHP85 #Hash #MHash #Deprecated
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
-z / --zend-extensionPHP 8.5 оба параметра
-z и --zend-extension окончательно удалены. Это изменение — финальный шаг в устранении давно сломанной функциональности: опция -z не работала корректно для загрузки Zend-расширений как минимум на протяжении последних нескольких основных релизов PHP (например, в ветках 8.x и 7.x), а её реализация в CLI/CGI SAPI всегда была неполноценной.• Опция
-z была сломана годами и окончательно удалена в PHP 8.5.• Если она использовалась формально — просто удалите её.
• Если нужно загрузить расширение — используйте
-d zend_extension=....#PHP #PHP85
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
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);
}Ключевые преимущества
Идеальные сценарии для использования
Итог
2026 год на дворе. Пора писать модели на современном PHP, используя его синтаксис, а не обходные пути ранних версий Laravel.
#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).
Небольшое, но очень приятное дополнение для более чистого и выразительного кода.
#PHP #Laravel12
Please open Telegram to view this post
VIEW IN TELEGRAM
Laravel начинает 2026 год не сбавляя темпа! Вышли версии 12.45.1, 12.45.2 и главная звезда — 12.46.0. Это не просто исправления багов, а новые мощные инструменты для работы с массивами, коллекциями и авторизацией.
Давайте разберем нововведения, чтобы вы могли сразу применять их в своих проектах. Все изменения обратно совместимы.
Одна из частых задач — отфильтровать массив, оставив или удалив конкретные значения. Раньше приходилось писать циклы или использовать
array_filter. Теперь в хелперах Illuminate\Support\Arr есть два новых метода, делающих это в одну строку. Arr::onlyValues()Оставляет в массиве только элементы с указанными значениями.
use Illuminate\Support\Arr;
$roles = ['admin', 'editor', 'viewer', 'guest'];
$allowedRoles = Arr::onlyValues($roles, ['admin', 'editor']);
// Результат: [0 => 'admin', 1 => 'editor']
Arr::exceptValues()Делает обратное — удаляет элементы с указанными значениями.
$statuses = ['pending', 'completed', 'failed', 'shipped'];
$activeStatuses = Arr::exceptValues($statuses, ['failed', 'completed']);
// Результат: [0 => 'pending', 3 => 'shipped']
strict: true. Это спасет от коварных багов.$mixedValues = [1, '1', 2, '2', 3];
$integers = Arr::onlyValues($mixedValues, [1, 2, 3], strict: true);
// Результат: [0 => 1, 2 => 2, 4 => 3] (строка '1' не попала!)
Идеально для: фильтрации конфигов, очистки статусов, санации данных из форм.
📦 Умная проверка коллекций:
containsManyItems()Работа с коллекциями стала выразительнее. Новый метод
containsManyItems() дополняет существующий containsOneItem() и проверяет, содержит ли коллекция более одного элемента.Простая проверка:
collect([1, 2])->containsManyItems(); // true
collect([1])->containsManyItems(); // false
Мощь в callback-функции: Метод может проверить, удовлетворяют ли условию более одного элемента.
$users = collect([
['name' => 'John', 'role' => 'admin'],
['name' => 'Jane', 'role' => 'editor'],
['name' => 'Bob', 'role' => 'admin'],
]);
$hasMultipleAdmins = $users->containsManyItems(fn($user) => $user['role'] === 'admin');
// Результат: true (админов больше одного)
Сценарий использования: Валидация, где нужно убедиться, что пользователь выбрал хотя бы два варианта. Метод эффективен и прекращает работу, как находит второй подходящий элемент.
Метод
has() фасада Gate теперь может принимать любые Enum (UnitEnum), а не только строки или BackedEnum.Раньше проверка существования правила была только по строке:
if (Gate::has('view-dashboard')) {
// Правило существует
}Теперь можно использовать чистые
Enum для типобезопасности:enum Abilities {
case VIEW_DASHBOARD;
case EDIT_POST;
}
Gate::define(Abilities::VIEW_DASHBOARD, fn($user) => $user->isAdmin());
if (Gate::has(Abilities::VIEW_DASHBOARD)) { // Работает с UnitEnum!
// Проверка прошла
}Практическая польза: Это открывает возможности для динамической регистрации прав и элегантной организации кода авторизации.
Каждый минорный релиз несет важные стабилизирующие правки:
- 12.45.1: Исправлена работа
ResourceCollection при передаче простого массива вместо коллекции моделей. -12.45.2: Починены методы
Validator::appendRules() и toArray() для AnonymousResourceCollection. - 12.46.0: Исправлено клонирование подключений к БД с префиксом таблиц и добавлены опции блокировок DDL для MySQL.
1. Меньше шаблонов: Фильтрация массивов и проверка коллекций теперь в одну строку.
2. Более надежный код: Строгая типизация в хелперах и использование Enum в
Gate предотвращают целый класс ошибок. 3. Современный стек: Фреймворк продолжает интегрировать лучшие практики и возможности PHP.
Обновление простое и безопасное:
composer update laravel/framework.Changelog: v12.46.0, v12.45.2, v12.45.1.
#Laravel #Laravel12 #PHP
Please open Telegram to view this post
VIEW IN TELEGRAM