PHP 8.6 Beta 1 ships Thursday, August 13, and marks the soft feature freeze. Any RFC that hadn’t finished voting by now missed the beta.
Here is what the freeze locks in:
- Partial function application, which creates a closure with some arguments prefilled using a
?placeholder - A polling API in the
Io\Pollnamespace that can use epoll or WSAPoll instead ofstream_select() - The
Time\Durationclass for representing durations and doing math on them - Readonly property defaults, which property hooks made useful on interfaces
- Closure optimizations, inferring
staticand caching closures the engine can prove are identical clamp(), which keeps a value inside a range- Secure session defaults, with
session.use_strict_modeandsession.cookie_httponlynow1andsession.cookie_samesitenowLax #[\Override]on class constants and enum cases,__debugInfo()on enums, a built-inSortDirectionenum, and doc comments on function parameters
What the Soft Freeze Actually Means
Beta 1 is the deadline for RFCs, not the end of every change. The hard feature freeze lands on September 22, and after that date the release managers have to approve anything new. The three betas between now and then exist to shake bugs out of what already merged.
If you maintain an extension or a tool that tracks php-src, you can start testing against now, and the next six weeks are the window to report anything that breaks before RC 1.
The Deprecations
The deprecations RFC ran 35 separate ballots and closed on August 10, so its results come in Beta 1. Those become the notices you see the first time you point an existing app at 8.6, including is_double(), is_integer(), is_long(), doubleval(), spl_object_hash(), spl_classes(), strcoll(), metaphone(), returning a value from __construct() or __destruct(), and a set of newly reserved identifiers. We covered which ballots passed the day the vote closed.
None of them break code in 8.6. They simply raise deprecation warnings.
What Missed the Cutoff
Three proposals fell away in the last two weeks of the window:
- Voters declined the pipe assignment operator (
|>=) 14 to 12 with seven abstentions, short of the two thirds it needed. - Seifeddine Gmati retargeted literal scalar types past 8.6 rather than race a vote against the tag.
One proposal made it in right at the end. Voters accepted object property writes on objects referenced by constants 17 to 2 with six abstaining.
The Rest of the Schedule
| Date | Release |
|---|---|
| Aug 13, 2026 | Beta 1, soft feature freeze |
| Aug 27, 2026 | Beta 2 |
| Sep 10, 2026 | Beta 3 |
| Sep 22, 2026 | Hard feature freeze |
| Sep 24, 2026 | RC 1 |
| Oct 8, 2026 | RC 2 |
| Oct 22, 2026 | RC 3 |
| Nov 5, 2026 | RC 4 |
| Nov 19, 2026 | GA |
The release managers note that individual releases can be added or dropped as development goes, but Nov 19 will remain the date of the official 8.6 release.
Trying It Out
Beta builds are found on the pre-release builds page. If you maintain packages or applications, now is a good time to run your test suite against PHP 8.6.
References
- PHP 8.6 release schedule
- Partial Function Application, v2
- Duration class
- Readonly property defaults
- Add clamp() function
- Deprecations for PHP 8.6
Everything we've written on the release is under the PHP 8.6 tag, and happy testing!