1*37748cd8SNickeau<?php 2*37748cd8SNickeau 3*37748cd8SNickeau 4*37748cd8SNickeaunamespace ComboStrap; 5*37748cd8SNickeau/** 6*37748cd8SNickeau * Class Template 7*37748cd8SNickeau * @package ComboStrap 8*37748cd8SNickeau * https://stackoverflow.com/questions/17869964/replacing-string-within-php-file 9*37748cd8SNickeau */ 10*37748cd8SNickeauclass Template 11*37748cd8SNickeau{ 12*37748cd8SNickeau 13*37748cd8SNickeau const VARIABLE_PREFIX = "$"; 14*37748cd8SNickeau protected $_string; 15*37748cd8SNickeau protected $_data = array(); 16*37748cd8SNickeau 17*37748cd8SNickeau public function __construct($string = null) 18*37748cd8SNickeau { 19*37748cd8SNickeau $this->_string = $string; 20*37748cd8SNickeau } 21*37748cd8SNickeau 22*37748cd8SNickeau /** 23*37748cd8SNickeau * @param $string 24*37748cd8SNickeau * @return Template 25*37748cd8SNickeau */ 26*37748cd8SNickeau public static function create($string) 27*37748cd8SNickeau { 28*37748cd8SNickeau return new Template($string); 29*37748cd8SNickeau } 30*37748cd8SNickeau 31*37748cd8SNickeau public function set($key, $value) 32*37748cd8SNickeau { 33*37748cd8SNickeau $this->_data[$key] = $value; 34*37748cd8SNickeau return $this; 35*37748cd8SNickeau } 36*37748cd8SNickeau 37*37748cd8SNickeau public function render() 38*37748cd8SNickeau { 39*37748cd8SNickeau 40*37748cd8SNickeau $splits = preg_split("/(\\".self::VARIABLE_PREFIX."[\w]*)/",$this->_string,-1,PREG_SPLIT_DELIM_CAPTURE); 41*37748cd8SNickeau $rendered = ""; 42*37748cd8SNickeau foreach($splits as $part){ 43*37748cd8SNickeau if(substr($part,0,1)==self::VARIABLE_PREFIX){ 44*37748cd8SNickeau $variable = trim(substr($part,1)); 45*37748cd8SNickeau $value = $this->_data[$variable]; 46*37748cd8SNickeau } else { 47*37748cd8SNickeau $value = $part; 48*37748cd8SNickeau } 49*37748cd8SNickeau $rendered .= $value; 50*37748cd8SNickeau } 51*37748cd8SNickeau return $rendered; 52*37748cd8SNickeau 53*37748cd8SNickeau } 54*37748cd8SNickeau 55*37748cd8SNickeau /** 56*37748cd8SNickeau * 57*37748cd8SNickeau * @return false|string 58*37748cd8SNickeau * @deprecated Just for demo, don't use because the input is not validated 59*37748cd8SNickeau * 60*37748cd8SNickeau */ 61*37748cd8SNickeau public function renderViaEval() 62*37748cd8SNickeau { 63*37748cd8SNickeau extract($this->_data); 64*37748cd8SNickeau ob_start(); 65*37748cd8SNickeau eval("echo $this->_string ;"); 66*37748cd8SNickeau return ob_get_clean(); 67*37748cd8SNickeau } 68*37748cd8SNickeau} 69