PHP 5276 ~ 1 мин.

Что нового в PHP 8.6

Что нового в PHP 8.6

PHP 8.6 возможно выйдет в конце ноября 2026 года, а мы пока в этом посте будем рассматривать все RFC, которые будут появляться в течение этого года, по мере их рассмотрения и принятия.

Новый функционал

Сообщение об ошибке/исключении в json_decode теперь указывает место возникновения ошибки

До PHP 8.6 в json_decode и json_last_error_msg сообщения об ошибках содержали тип ошибки и описание, но не указывали точное место возникновения ошибки при её анализе. Начиная с PHP 8.6, все ошибки декодирования JSON пытаются включить в строку JSON местоположение, где произошла ошибка:

$json = '[{';
json_decode($json, flags: JSON_THROW_ON_ERROR);
// JsonException: Syntax error near location 1:3
$json = '[{';
try {
  json_decode($json, flags: JSON_THROW_ON_ERROR);
}
catch (JsonException $ex) {
    echo $ex->getMessage(); // "Syntax error near location 1:3"
}
json_decode('[[[[[[[[[[42]]]]]]]]]]', depth: 6);
json_last_error_msg(); // "Maximum stack depth exceeded near location 1:6"

Новая функция clamp

В PHP 8.6 появилась новая функция clamp, которая проверяет, находится ли заданное значение в пределах заданного диапазона. Если значение находится в пределах этого диапазона, возвращается исходное значение. Если оно выходит за пределы диапазона, clamp возвращается ближайший предел:

clamp(5, 0, 100); // 5
clamp(0, 0, 100); // 0
clamp(-5, 0, 100); // 0
clamp(100, 0, 100); // 100
clamp(105, 0, 100); // 100
clamp(105, 100, 100); // 100

clamp(3.01, 1.6, 4.2); // 3.01
clamp(10.0, 1.6, 4.2); // 4.2
clamp(0, M_1_PI, M_2_PI); // 0.31830988618379

clamp(5, 10, 12.5); // 10
clamp(5, 10.0, 12); // 10.0
clamp(3.14, 10, 20); // 10
clamp(3.14, 0, 20); // 3.14

Readonly свойства по-умолчанию

С добавлением хуков свойств в PHP 8.4 вы можете определять хуки свойств для интерфейсов:

interface MigratesUp
{
    public string $name { get; }

    public function up(): QueryStatement;
}

Во многих случаях будет целесообразно использовать свойства только для чтения со значениями по умолчанию:

final class CreateBooksTable implements MigratesUp
{
    public readonly string $name = '2026-01-01_create_books_table';
    
    public function up(): QueryStatement
    { /* … */ }
}

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

final class CreateBooksTable implements MigratesUp
{
    // ✅
    public readonly string $name = '2026-01-01_create_books_table';
    
    // …
}

более подробно в статье здесь.

Что думаешь?

pavbk14.06.2026

Будем надеяться что появится async await

ЧеловекНаписавшийКомментарий19.02.2026

Будем надеяться , что ещё что-то добавят)))

Категории
  • PHP 70
  • Заметки 18
  • Безопасность 4
  • Флуд 2
  • Nginx 2
  • ИТ новости 2
  • Видео 1
  • Docker 1
  • Roadmap 1
  • Архитектура 0

Хочешь поддержать сайт?

Делаем из мухи слона

sergeymukhin.com

персональный блог о веб-разработке от Сергея Мухина. Блог был основан в 2018 году, и собирался уделять основное внимание последним тенденциям, учебным пособиям, а также советам и рекомендациям, позволяющим начинающим девелоперам встать быстрее на правильную дорогу веб разработки, но что-то пошло не так 😃

Релизы PHP 8.5

Дата Релиз
3 Июля 2025 Альфа 1
17 Июля 2025 Альфа 2
31 Июля 2025 Альфа 3 пропущена
31 Июля 2025 Альфа 4
12 Августа 2025 Feature freeze
14 Августа 2025 Бета 1
28 Августа 2025 Бета 2
11 Сентября 2025 Бета 3
25 Сентября 2025 RC 1
09 Октября 2025 RC 2
23 Октября 2025 RC 3
06 Ноября 2025 RC 4
20 Ноября 2025 GA

Что нового?