Removing a method from an interface leaves every implementation with a public method nothing calls, and the language has no opinion about that.
interface Exportable
{
public function export(): string;
// public function exportHeaders(): array; ← removed
}
// four classes still have exportHeaders(). all four are
// dead. three of them differ from each other, which
// means somebody maintained a divergence in dead code.
The #[Override] attribute turns this into a fatal error, which is exactly what it is for and only if the attribute was on the method in the first place. Our sweep last December put it on every implementation, so removing the interface method produced four failures at load rather than four orphans — the first time a removal has been safe rather than hopeful.