Buenos días, todo bien
En el código donde indicas que no se imprimen por pantalla los saltos de carro el código HTML que veo al ejecutar en el navegador es el siguiente: *****aprender**********aprende*****<br><br><br>
Esto tiene que ver con cómo ejecuta el intérprete php las órdenes y cómo has definido la función rellenar. Es un problema interesante y en un código extenso puede ser muy difícil de detectar.
Cuando vemos esta línea: echo rellenar($cadena1).'hace frio <br><br><br>'.rellenar($cadena2);
Pensamos que se ejecuta de izquierda a derecha, como es lo habitual y pensamos que estamos concatenando cadenas. Sin embargo nos podemos encontrar con resultados no esperados como el que se obtiene aquí cuando tratamos de realizar una concatenación de funciones que ejecutan algo en lugar de devolver algo. La forma de explicarlo sería: la función rellenar que has planteado ejecuta un echo, es decir, no devuelve algo, sino que ejecuta algo sin devolver nada. Esto es importante: diferencia entre ejecutar algo y devolver algo. Al ejecutar, cuando se produce la concatenación, primero ejecuta lo que es susceptible de ejecutar, de ahí que salga por pantalla *****aprender**********aprende***** y luego realiza la concatenación ¿Qué concatena? hace frio <br><br><br> porque no hay nada más que concatenar (lo otro ya se ejecutó).
Si planteamos el código así:
<?php
$cadena1 = "aprender";
$cadena2 = "aprende";
function rellenar($cadena){
return str_pad($cadena, (strlen($cadena)+10) , "*", STR_PAD_BOTH);
}
echo rellenar($cadena1).'hace frio <br><br><br>'.rellenar($cadena2);
?>
Ya obtenemos el resultado esperado. Es importante acostumbrarse a trabajar usando return (cuando sea adecuado usarlo).
En este caso, si quieres concatenar, debes concatenar algo. Tú estabas intentando concatenar la ejecución de funciones con una cadena y esto genera un resultado no esperado. Si simplemente concatenas cadenas con otras cadenas devueltas por funciones ya todo va bien.
Saludos.