Some don't, but $SHELL is generally accurate enough for Bash and Zsh.
You can also check the shell by checking the PID:
ps -p $$
But then you need to do extra output parsing plus, obviously, ps each time you output $PS1. Which is going to be a little overkill for this project since it's only Zsh and Bash you're wanting to capture and you can always have fallback support for those flags when automatic detection fails.