I was hoping someone would drop in with a killer argument that very clearly articulates the central role that templates play in EE.
Well if you need it enumerated… Templates are a core portion of the application. It’s not a module to be cast aside or determined whether or not it’s best to implement for a given site. Templates are your site in ExpressionEngine. Any effort expended away from this approach is energy spent working against the application, and that wastes your time as as developer, makes your site less portable, and increases the difficulty for the client to takeover, get support, hire another EE developer, etc. So part of the answer is that there’s not a sales pitch necessary to determine whether or not to use EE’s template system. If for a given project there is some need to not use EE’s template system, you probably shouldn’t be using EE at all for the project.
The template parser gives you ready access to your information, in dozens of different ways, with human-readable syntax and flexibility. This dependable syntax is what allows you to use modules, plugins, and extensions to extend ExpressionEngine’s abilities that are not part of a standard installation in a consistent and predictable manner. Also if you are not using tags, in addition to re-inventing the wheel with whatever PHP you use to fetch and output your data, you are most likely bypassing some very important security and authorization checks and filtering.
From an additional technical standpoint, PHP executed in templates is still run through the template parser. You aren’t doing much in your favor as far as lightening the load of the application, and in fact would probably make it worse. Not only do you have to enable PHP parsing (which in some organizations would present security risks or at least be a likely source of introduction for unintentional errors) but you will be selecting output or input parsing, each taking place at different times in different contexts within the template parser. If you’re using a fully PHP-based output solution, this may force you to code in ways that are unconventional or undesirable to work within the confines of PHP parsed in templates at that stage. Lastly, PHP in templates must be executed with eval() and PHP unfortunately handles variable scoping quite a bit differently within eval() than it does when executed by the parser from a file, which could further complicate your code.
Shall I go on?