In a switch, if you forget break, PHP runs the next case too. That's called fallthrough, and while it's sometimes what you want, it's often a bug. This RFC from Volker Dusch and Tim Düsterhus adds a fallthrough; marker. If a non-empty case falls into the next one without it, PHP emits a diagnostic.
Show me
Here is the RFC's example:
switch ($mode) { case 'create': // Non-empty case falls through to the next case audit('create'); case 'update': persist($payload); break; } switch ($mode) { case 'create': audit('create'); fallthrough; // Indicate the the fallthrough is intentional. case 'update': persist($payload); break; }
Empty cases still work without a marker, so grouping labels like this is fine:
switch ($extension) { case 'jpg': case 'jpeg': return 'image/jpeg'; case 'png': return 'image/png'; }
How it works
At compile time, PHP checks each case that contains code. Its last statement must be break, continue, return, throw, goto or fallthrough;. If it isn't, PHP emits either an E_DEPRECATED or an E_WARNING, and a second vote would decide which. The same rule applies to default: when it isn't the last case.
In the proposed implementation, fallthrough; is just a read of a constant named fallthrough. That means libraries can use it on older PHP versions with a one-line polyfill:
if (!defined('fallthrough')) define('fallthrough', null);
The RFC points to other languages with something similar, including C, Go, C# and Swift. PHP's match already has no fallthrough at all.
What it means for existing code
Code that intentionally falls through from a non-empty case will start showing a diagnostic, but it still runs, and you fix it by adding fallthrough;. The RFC doesn't turn fallthrough into an error, and it doesn't change how switch works.
Where it stands
The RFC is a draft. It was first written on April 21, 2026, and targets PHP 8.6. The page has two votes set up, but no one has voted yet.