allora, se $counter++ incrementa di 1 il valore di $counter, $counter-- decrementa di 1 il valore di $counter. Assodato questo, quando richiami per la prima volta conta_10, inizialliza $counter = 0, lo incrementa di 1 e arriva all'if. Se la condizione è vera, fà una chiamata ricorsiva a conta_10: "static $counter = 0;" non viene più eseguita perchè "static $counter" è già stato inizializzato alla prima chiamata, quindi incrementa $counter di 1 e arriva all'if, se if è vero nuova chiamata ricorsiva. Così dicendo finchè $counter = 10, allora $counter++ te lo setta ad 11 e l'if non è più vero e allora esegue $counter-- riportando il valore a 10. Quindi, tornando indietro nello stack delle chiamate (vedi lo schema che ti ho fatto io) l'esecuzione della chiamata riparte da dopo l'if, quindi da $counter--, quindi alla fine vedrai che il sistema conta da 0 a 10 e torna indietro a 0. Insomma, l'esecuzione della chiamata a call_10 si blocca finchè la chiamata dentro l'if non termina, quindi viene fuori lo schema che ti ho detto io prima.