Well, I really dont see the point in a template engine that uses repalcements/regex so i have made this tutorial to show you another way.

PHP Is already a template engine, when you write <?php echo $var?> its just like doing <{$var}> or {$var}

Think of it this way, PHP Already translates <?php echo '<b>hello</b>'?> into <b>hello</b> by its engine, so why make it do everything 2 times over.

The way you would implement a template engine is like so

------

Firstly create a template class

PHP Code: 
    class Template
    
{
       var 
$vars = array();
    
       function 
__set($key,$val)
       {
          
$this->vars[$key] = $val;
       }
    
       function 
__get($key)
       {
         return isset(
$this->vars[$key]) ? $this->vars[$key] : false;
       }
    
       function 
output($tpl false)
       {
          if(
$tpl === false)
          {
             die(
'No template file selected in Template::output(...)');
          }
    
          if(!
file_exists(($dir 'templates/' $tpl '.php')))
          {
             die(
sprintf('Tpl file does not exists (%s)',$dir));
          }
    
          new 
TemplateLoader($dir,$this->vars);
          return 
true;
       }
    } 
This is what you use in your logic such as index.php, you will set data just like an **stdClass** just google it if your unsure. and when you run the output command it sends the data and tpl to the next class below.

----------

And then create a standalone class to compile the tpl file within.

PHP Code: 
    class TemplateLoader
    
{
        private 
$vars = array();
        private 
$_vars = array(); //hold vars set within the tpl file
        
function __construct($file,$variables)
        {
            
$this->vars $variables;
            
//Start the capture;
            
ob_start();
               include 
$file;
               
$contents ob_get_contents();
            
ob_end_clean(); //Clean it

           //Return here if you wish
           
echo $contents;
        }
    
        function 
__get($key)
        {
            return isset(
$this->vars[$key]) ? $this->vars[$key] : (isset($this->_vars[$key]) ? $this->_vars[$key] : false) : false;
        }
    
        function 
__set($key,$val)
        {
           
$this->_vars[$key] = $val;
           return 
true;
        }

       function 
bold($key)
       {
          return 
'<strong>' $this->$key '</string>';
       }
    } 
The reason we keep this seperate is so it has its own space to run in, you just load your tpl file as an include in your constructor so it only can be loaded once, then when the file is included it has access to all the data and methods within TemplateLoader.

----------

#Index.php
PHP Code: 
 <?php
       
require_once 'includes/Template.php';
       require_once 
'includes/TemplateLoader.php';
    
    
       
$Template = new Template();
       
       
$Template->foo 'somestring';
       
$Template->bar = array('some' => 'array');
    
       
$Template->zed = new stdClass(); // Showing Objects
    
       
$Template->output('index'); // loads templates/index.php
    
?>
Now here we dont really want to mix html with this page because by seperating the php and the view / templates you making sure all your php has completed because when you send html or use html it stops certain aspects of your script from running.

----------

templates/index.php

PHP Code: 
header
      
        <h1><?php $this->foo;?></h1>
        <ul>
            <?php foreach($this->bar as $this->_foo):?>
                <li><?php echo $this->_foo?></li>
            <?php endforeach; ?>
        </ul>
         <p>Testing Objects</p>
         <?php $this->sidebar $this->foo->show_sidebar $this->foo->show_sidebar false;?>
         <?php if($this->sidebar):?>
            Showing my sidebar.
         <?php endif;?>
    footer
Now here we can see that were mixing html with php but this is ok because in ehre you should only use basic stuff such as Foreach,For etc. and Variables.

----------

NOTE: IN the TemplateLoader Class you can add a function like..

PHP Code: 
function bold($key)
{
    return 
'<strong>' $this->$key '</string>';

This will allow you to increase your actions in your templates so bold,italic,atuoloop,css_secure,stripslashs..

You still have all the normal tools such as stripslashes/htmlentites etc.

Heres a small example of the bold.

PHP Code: 
$this->bold('foo'); //Returns <strong>somestring</string> 
---------

You can add lots of tools into the TempalteLoader class such as inc() to load other tpl files, you can develop a helper system so you can go $this->helpers->jquery->googleSource

If you have any more questions feel free to ask me.
litewarez Reviewed by litewarez on . Creating a Fast PHP Template System Well, I really dont see the point in a template engine that uses repalcements/regex so i have made this tutorial to show you another way. PHP Is already a template engine, when you write <?php echo $var?> its just like doing <{$var}> or {$var} Think of it this way, PHP Already translates <?php echo '<b>hello</b>'?> into <b>hello</b> by its engine, so why make it do everything 2 times over. The way you would implement a template engine is like so ------ Rating: 5