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.