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