Developers

PHP 8.6 release date: November 19, features and deprecations

PHP 8.6 is scheduled for November 19, 2026. Here are its new features, deprecations and behavior changes, plus the PHP 8.2 support deadline.

4 min read

PHP 8.6 is scheduled for general availability on November 19, 2026, according to the release schedule on the PHP wiki (as of October 2026). The release adds readonly property defaults, partial function application, a built-in clamp() function and a polling API, and it deprecates several long-tolerated constructs. PHP 8.2 users should note that its security support ends on December 31, 2026.

PHP 8.6 release date and schedule

The wiki lists the final steps as follows (as of October 30, 2026). Dates can still shift if the release managers find a blocker, so check the wiki before upgrading production systems.

  • RC4: October 21, 2026
  • RC5: November 5, 2026 (planned)
  • GA (stable release): November 19, 2026

The first release candidate was skipped; the series went straight from beta 3 and the hard feature freeze (September 22) to RC2 on September 24. No new features are merged during the RC phase without the release manager’s approval.

New features in PHP 8.6

The list below follows the UPGRADING notes in the PHP 8.6 branch, which are the project’s own record of what shipped.

Language

  • Readonly property defaults: readonly properties can now declare a default value.
  • Partial function application: a call can use placeholders to produce a function with some arguments already bound.
  • #[\Override] on class constants: the attribute now works on constants, including enum cases.
  • Enums: __debugInfo() can be defined on enums.
  • Constants holding objects: properties of an object stored in a constant can be written.
  • error_include_args: a new INI option, off by default, controls whether function arguments appear in error messages.

Standard library and extensions

  • clamp(): a built-in function for limiting a value to a range.
  • Polling API: new Io\Poll classes for stream polling.
  • Time\Duration: a new duration class with a matching Time\TimeException.
  • Streams: a stream error-handling API (stream_last_errors(), stream_clear_errors()) and more socket context options.
  • OpenSSL: TLS session resumption, external PSK and TLS 1.3 early data.
  • Reflection: ReflectionProperty::isReadable() and isWritable().
  • MySQLi: mysqli_quote_string().
  • JSON: error messages now include the location of the problem.

Deprecations to check before upgrading

Deprecations raise E_DEPRECATED notices but do not break code yet. In 8.6 they include:

  • returning a value from __construct() or __destruct();
  • return inside a finally block;
  • the third argument of define();
  • let and is as identifiers, _ as a constant name, and a function named readonly;
  • spl_object_hash() (use spl_object_id()), metaphone(), and is_double(), is_long(), is_integer(), doubleval();
  • mbregex, because the Oniguruma library has reached end of maintenance;
  • several ArrayIterator sorting and serialization methods, and the SplFileObject CSV methods.

The UPGRADING notes list no removed extensions or SAPIs for 8.6.

Behavior changes that can break code

  • trim(), ltrim() and rtrim() now strip the form feed character by default.
  • New session defaults: session.use_strict_mode=1, session.cookie_httponly=1 and session.cookie_samesite="Lax".
  • preg_grep() returns false on execution errors instead of a partial array.
  • Many functions now throw ValueError for invalid input, such as NUL bytes in getenv() or putenv() arguments.
  • php://filter chains are limited to 16 filters unless configured otherwise.
  • mbstring Unicode tables move to version 18.0.

PHP support timeline

Per the supported versions page (as of October 2026):

  • PHP 8.2: security support until December 31, 2026
  • PHP 8.3: security support until December 31, 2027
  • PHP 8.4: active support until December 31, 2026, security until December 31, 2028
  • PHP 8.5: active support until December 31, 2027, security until December 31, 2029

Upgrade checklist

  1. Run your test suite on 8.6 release candidates with error_reporting set to E_ALL to surface deprecations.
  2. Check the require block and the platform setting in composer.json and confirm each dependency allows 8.6.
  3. Verify that the extensions you load, especially mbstring regex users, mysqli and SPL-heavy code, still behave as expected.
  4. Update static analysis tools to a version that understands 8.6 syntax.
  5. Review session configuration if your app relied on the old cookie defaults.

For related release coverage, see our Developers and Open Source sections, the Launches calendar, and our explainer on Python 3.15 lazy imports.

Frequently asked questions

When is PHP 8.6 released?

The PHP wiki schedules general availability for November 19, 2026, with the final planned release candidate (RC5) on November 5, 2026 (schedule as of October 30).

Is PHP 8.2 end of life?

Not yet. PHP 8.2 is in security-only support until December 31, 2026, after which it stops receiving fixes.

What are the main PHP 8.6 features?

Readonly property defaults, partial function application, clamp(), #[\Override] on constants, a polling API and a Time\Duration class.

Does PHP 8.6 remove any functions?

The UPGRADING notes list deprecations and behavior changes, but no removed extensions. Deprecated items still work in 8.6 and emit notices.