xref: /template/strap/ComboStrap/Template.php (revision 37748cd8654635afbeca80942126742f0f4cc346)
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