PHP 8.6 has reached RC3, giving Drupal teams another pre-release checkpoint for compatibility testing. The story looks at where Drupal support stands and what developers should verify before PHP 8.6 reaches stable.

PHP 8.6 has reached RC3, giving Drupal teams another pre-release checkpoint for compatibility testing. The story looks at where Drupal support stands and what developers should verify before PHP 8.6 reaches stable.
I wanted to test my PHP 8.6 code samples without putting a beta PHP on the laptop I use every day.
I've written SO many string transformations full of temp variables and fn() wrappers. PHP 8.6's partial function application plus the pipe operator gets rid of both.
https://www.phparch.com/2026/09/stop-writing-php-like-this-8-6-fixes-it/
#PHPC tip: PHP 8.6 lets you put `#[\Override]` on class constants.
Rename the parent constant, and the child fails at compile time instead of drifting into a separate, unused constant.
Video: https://youtu.be/U9Jrcg1Ns1k
PHP 8.6 lands on November 19th, 2026, but you don't have to wait. I recorded my walkthrough on beta 3 with the official Docker image (php:8.6.0beta3-cli), so test your app now.
https://www.phparch.com/2026/09/stop-writing-php-like-this-8-6-fixes-it/
Have you ever hit this fatal error?
In PHP 8.6, that line works. What did you do to get around it?
Video: https://youtu.be/U9Jrcg1Ns1k
My PHP 8.6 video covers the features I think will make my personal life better. Which one should I have covered instead?
https://www.phparch.com/2026/09/stop-writing-php-like-this-8-6-fixes-it/
What does the `1` mean in the first call?
PHP 8.6 adds a `SortDirection` enum to the core. The pull requests I approve fastest are the ones where I never have to open another file to understand an argument.
Video: https://youtu.be/U9Jrcg1Ns1k
Partial function application is a fancy computer science term for setting up a function with some of its parameters now and passing the rest later. PHP 8.6 makes it native syntax.
#PHP #PHP86 #FunctionalProgramming
https://www.phparch.com/2026/09/stop-writing-php-like-this-8-6-fixes-it/
#PHPC tip: PHP 8.6 adds `clamp()`, so the two-`if` range check goes away.
Swap min and max, and PHP throws a `ValueError`.
Video: https://youtu.be/U9Jrcg1Ns1k
Two new symbols to learn in PHP 8.6: ? is the argument placeholder, and ... means zero or more parameters. Define the function up front and fill in the rest later.
#PHP #PHP86 #FunctionalProgramming
https://www.phparch.com/2026/09/stop-writing-php-like-this-8-6-fixes-it/
#PHP8.6 deprecates `is_integer()`, `is_long()`, `is_double()`, and `doubleval()`.
I ran this grep against my app directory and found 150 "problems".
Every call will fill your logs with deprecation notices the day you upgrade.
Video: https://youtu.be/U9Jrcg1Ns1k
Pair the PHP 8.5 pipe operator with PHP 8.6 partial function application and you get some VERY concise code (and I expect Rector to help convert the old stuff).
https://www.phparch.com/2026/09/stop-writing-php-like-this-8-6-fixes-it/
I've handwritten min/max range checks for the current page number more times than I can count. PHP 8.6 adds clamp(), and I might polyfill it in older projects.
https://www.phparch.com/2026/09/stop-writing-php-like-this-8-6-fixes-it/
PHP 8.6's clamp() has a built-in range check, so you can't mix up the min and max values. I've done that more than once, so I'm VERY happy about this one.
https://www.phparch.com/2026/09/stop-writing-php-like-this-8-6-fixes-it/
array_multisort() takes SORT_ASC/SORT_DESC as ints, so 42 gets right through. PHP 8.6 adds a SortDirection enum in the global namespace, and the RFC hints at wider adoption.
https://www.phparch.com/2026/09/stop-writing-php-like-this-8-6-fixes-it/
In PHP 8.4, fulfilling an interface property meant redefining the whole property hook. PHP 8.6 lets a readonly property do it and keeps the class much tighter. Big win for value objects.
https://www.phparch.com/2026/09/stop-writing-php-like-this-8-6-fixes-it/