switch/case statements are one of my favorite anti-patterns not because I prefer to write spaghetti code but because they can make if/elseif blocks look a ton cleaner. Why would it be considered an anti-pattern? Because it could easily be abused to the point that you are munging up your control structure and basically just writing spaghetti code. Used sparingly, I’m still a fan.

A traditional if/elseif block can look like this:

if ($type == 'first')
{
	// Do first...
}
elseif ($type == 'second')
{
	// Do second...
}
elseif ($type == 'third')
{
	// Do third...
}
elseif ($type == 'fourth')
{
	// Do fourth...
}
else
{
	// Do the rest...
}

As you can see, you’re potentially analyzing the value of $type upwards of 4 times before reaching the final destination of running the else block. If we were to rewrite this as a switch/case statement, it would look more like this:

switch ($type)
{
	case 'first':
		// Do first...
		break;

	case 'second':
		// Do second...
		break;

	case 'third':
		// Do third...
		break;

	case 'fourth':
		// Do fourth...
		break;

	default:
		// Do the rest...
		break;
}

Speaking in regard to how I format my switch/case statement, it is in fact a few lines longer than the if/elseif blocks (easily remedied by dropping the blank lines, but sacrificing a small bit of readability in my opinion). Length aside, the switch/case does have a bit less typing considering we’re not writing out $type == '...' multiple times and is only analyzing the variable a single time instead of 4 different times.

Even though it’s considered an anti-pattern, I still me love some switch/case statements. Any time I am coding in Python and abusing dictionaries to simulate the same thing I remember why I still love coding in PHP.