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.
elseif block can look like this:
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:
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.