Ok, ok...
Según PHP Cita: PHP follows Perl's convention when dealing with arithmetic operations on character variables and not C's. For example, in Perl 'Z'+1 turns into 'AA', while in C 'Z'+1 turns into '[' ( ord('Z') == 90, ord('[') == 91 ).
Teniendo como base lo que se menciona anteriormente, el problema es que cuando PHP llega a z sigue porque la siguiente conversión que es aa php lo interpreta como 93 que es representación de a y está por debajo de la z, hasta que llega a
za que ahí es cuando se convierte en falsa en el bucle.
Al momento no me acuerdo de algún error, pero cuando lo vea lo dejo saber, claro está si es que contesté la pregunta
Edito: Si alguién sabe de algún error en lo que verifico alguno, puede adelantarse, así no se detiene el juego en lo que consigo uno.