Hola, claro, en php no existe nada asyncrónico, de hecho hoy en día ya casi no vale la pena aprender php.
Algunas diferencias claves entre php y otros lenguajes son las siguientes:
Funciones asyncrónicas por defecto: En PHP todo es síncrono o sea, todo se ejecuta bajo el mismo thread, por este motivo no existen los eventos asincrónicos porque nativamente php no los soporta. Hay módulos para ejecutar tareas asincrónicas pero son módulos instalables no nativos. Generalmente cuando trabajas mucho tiempo con NodeJS uno se acostumbra que casi todo es asincrónico, de hecho si haces un .each() a una pila de datos verás que el loop se ejecuta de manera asyncrona por defecto, por eso debes pasarle una función como argumento porque es el callback de cada llamado, a menos que uses for(), pero en php esto no es así.
Ejecución persistente: Cuando escribes un código WEB en php debes tener en cuenta que todo el framework o todo el archivo se cargará cada ves que un usuario entre al sitio web, el apache levantará un thread y este invocará al script de php, esto quiere decir que debe inicializar todas las clases y funciones y parsear el código cada ves que alguien entra, esto provoca una carga exagerada al servidor en temas de procesamiento y uso de memoria, a demás, no puedes almacenar información persistente en alguna clase como variable porque todos los datos se destruyen al momento de finalizar la petición WEB del usuario, por eso se necesita tanto el uso de sesiones, en cambio en lenguajes de ejecución persistente como Java, Python, Node, Ruby, etc, se ejecutan una única ves, todo se inicializa, clases, funciones, variables, etc y por cada petición se llama a una función encargada de procesar los datos, pero no tiene que cargar a memoria toda la aplicación por cada petición, por esto el performance y la velocidad de respuesta es mucho mayor que php, se necesita un uso de memoria constante para mantener la aplicación corriendo en todo momento pero reduce el costo de carga por cada petición, por eso casi no existen sistemas transaccionales de alta demanda en php, por eso facebook tuvo que precompilar el código y llevarlo directo a la memoria sobre una máquina virtual como lo hace java. En una aplicación persistente no puedes guardar datos temporales en variables privadas de una clase persistente, en php da igual, por eso hay tantos errores de programación cuando te pasas de java a php o de php a java porque la manera de pensar la ejecución de las aplicaciones son totalmente distintas.
El uso de componentes externos: En PHP si quieres hacer uso de un componente debes instalarlo como librería compilada para la versión y arquitectura de tu sistema, generalmente es un .dll o un .so y las instalaciones no son nada faciles y pecl no tiene muchos adeptos. A comparación de otros lenguajes donde cada uno tiene su propio sistema de gestión de repositorios altamente robustos, en NodeJS usamos npm para instalar los módulos y estos a su ves pueden quedar almacenados en el mismo directorio de la aplicación o globalizarlos y puedes omitirlos cuando trabajas en equipo con otras personas usando repositorios porque luego los instalas desde el archivo del listado de dependencias (package.json), en python es la misma historia, tienes pip y la lista de paquetes vía requirements.txt, lo mismo con ruby y sus gemas, etc, pero en php el uso de repositorios es un desastre y generalmente debes depender demasiado del pool de funciones nativas, por eso es que php tiene funciones nativas para casi todo, porque instalar componentes adicionales es todo un lí, en cambio las personas que usan lenguajes modernos están acostumbrados a que el lenguaje que usan tiene solo lo justo y necesario y todo lo demás se instala como módulo y listo.
Mira, tu código lo puedes resumir de esta manera:
<?php
$n=1;
while($n < 8){
$n++;
}
echo 'foo';
Pero también así:
<?php
for($n = 0; $n < 8; $n++){
}
echo 'foo';
whk@machine:~/Descargas$ php -r 'for($n=0;$n<8;$n++){ echo "${n}\n"; } echo "fin\n";'
0
1
2
3
4
5
6
7
fin
Recuerda que php no necesita cierre de tag si no vas a arrojar contenido plano después de tu código, de hecho se recomienda dentro de lo posible nunca cerrar el tag porque cuando lo cierras hay muchos editores que le agregan un salto de línea adicional y esto provoca que php expulse (como si fuera un echo) ese salto de línea y esto puede ser fatal en un sistema WEB ya que cuando quieras ejecutar la función header() para enviar una cabecera te arrojará un warning porque no puedes enviar una cabecera después de enviar el body de la respuesta http debido a ese salto de línea que se escapa, por eso siempre es mejor no cerrar los scripts.
Saludos.