Estoy en desacuerdo que PHP es un lenguaje de plantillas, a pesar de que fue diseñado originalmente como tal (Ya han pasado muchos años desde PHP 4 y sus ancestros...).
Un lenguaje de plantillas no solamente te facilita la separación de lógica y presentación, sino que también te la limita.
Por ejemplo, si utilizas PHP como sistema de plantillas, es muy fácil mezclar lógica con presentación, ya que puedes hacer lo que sea si utilizas PHP como tu lenguaje de plantillas, aun así te encuentres en una vista. Un sistema de plantillas, simple y sencillamente tiene un conjunto de instrucciones que puedes utilizar, y cualquier función fuera de ese conjunto de instrucciones simplemente va a arrojar una excepción.
Muchos pensaran "ahh pero que inoveniencia", aunque realmente no la es. Cuando trabajas en equipos multi disciplinarios en donde existen front-end developers y back-end developers es donde los sistemas de plantillas lucen, porque puedes cambiar todo el front-end y no preocuparte en lo absoluto por el backend.
Caso de la vida real:
Hace tiempo trabajé en una empresa que utilizaba PHP 4 y utilizaba PHP como su sistema de plantillas. Un buen dia, llega un nuevo administrador de sistemas y actualiza de PHP 4 a PHP 5 (yeii!! Super) y de pronto... muchos front-end estaban arrojando Warnings y errores. Si hubieran utilizado un sistema de plantillas, solo hubiera bastado con actualizar el sistema de plantillas (de ser necesario) y listo, no hubiera pasado absolutamente nada.
Al contrario, se tuvieron que invertir varios días en actualizar el código del front end para eliminar los warnings y notices que php estaba arrojando.
Naturalmente, el ejemplo anterior, es como le dicen un "edge case" pero sin duda puede suceder.
Otro problema, es que muchos programadores no sanitizan el output, muchos ni siquiera saben que es. Todos los sistemas de plantillas sanitizan el output de fábrica, a menos de que pases un filtro para no sanitizarlo. (como raw en Twig).
En php tienes que hacer algo asi:
<?php echo htmlspecialchars($output); ?>
cuando en un sistema de plantillas solo pones el output:
{{ output }}
Veamos otro ejemplo donde los sistemas de plantillas lucen con PHP, supongamos que quieres iterar sobre un array en PHP y quieres saber si te encuentras en la ultima posicion.
Con PHP tendrias que hacer algo asi:
Código PHP:
Ver original$ultimo = count($elementos) - 1; foreach($elementos as $indice => $valor):
if($ultimo == $indice):
// ultimo elemento
else:
// haz lo que tengas que hacer
endif;
endforeach;
en un sistema de plantillas se escribiria como
{% for elemento in elementos if elemento.last %}
{% endfor %}
En sistemas de plantillas (como Twig) es muy sencillo tener herencia de plantillas, puedes minificar tu javascript y tu css, concatenar los archivos para minimizar los HTTP requests, creacion de skins (o themes) para tus aplicaciones, etc...
Y claro, todo eso se puede hacer solamente con PHP (Vease el ejemplo de Wordpress), pero en el backend todo es un revoltijo de codigo por todos lados, que es un dolor de cabeza de mantener ( y te lo digo en mi experiencia como colaborador del core de Wordpress).
Naturalmente, muchos argumentan el "overhead" de un sistema de plantillas.. que sinceramente es mínimo. El memory footprint de twig y assetic en mis aplicaciones es de alrededor 1.5 MB por proceso.
Pero en fin, cada quien usa lo que mejor le plazca. Habra gente que diga que un sistema de plantillas es inutil, y hay gente que les gusta. Aprender una nueva sintaxis, es ridiculmanete sencillo simplemente utilizan ese argumento porque no tienen ningun argumento en contra un sistema de plantillas.
Como menciones, si quieres saber las entrañas de un sistema de plantillas las puedes aprender utilizando sistemas de plantillas maduros, bien documentados y con una comunidad de expertos a tu disposicion en el dado caso que se te complique la vida.
En fin, realmente solo queria publicar esto para que quede como futura referencia a cualquier otra persona que tenga la misma duda que tu.