I understand the usage/behaviour difference between
Not really backward compatibility, but the ability to use code wihtout additionally loaded multibyte string extension. So a question of portability of the code.
strtolower() is always available.
mb_strtolower() is only available if the additional mbstring module is loaded. The function overloading feature allows to use the "generic" call to
strtolower() which will actually execute
mb_strtolower() if configured such. So there actually is no need to explicitly code
mb_strtolower() at all...
This makes code more portable, since it can run on systems with or without the mbstring extension.