blade模板引擎模仿

来源:互联网 发布:每天目标的软件 编辑:程序博客网 时间:2024/05/22 12:28

blade模板模仿

<?phpclass view{    protected $patternforeach1='/@foreach(\(.*\))/Us';    protected $patternforeach2='/@endforeach/Us';    protected $patternvar='/{(.*)}/Us';    protected $patternfor1='/@for(\(.*\))/Us';    protected $patternfor2='/@endfor/Us';    protected $patternif1='/@if(\(.*\))/Us';    protected $patternif2='/@endif/Us';    protected $patternelse1='/@elseif(\(.*\))/Us';    protected $patternelse2='/@else/Us';    public function compile($file)    {        foreach(func_get_args() as $key=>$value)        {            if($key>0){                foreach($GLOBALS as $k=>$v)                {                    if($value===$v)                    {                        $$k=$v;                    }                }            }       }        //开始编辑        $str=file_get_contents($file.'.blade.php');        $str=$this->elses($this->ifs($this->fors($this->foreachs($this->vars($str)))));        file_put_contents('./com'.$file.'balde.php',$str);        include './com'.$file.'balde.php';    }    public function vars($str)    {        $str=preg_replace($this->patternvar,"<?php echo ".'$1'." ;?>",$str);        return $str;    }    public function foreachs($str)    {        $str=preg_replace($this->patternforeach1,"<?php foreach".'$1'."{ ?>",$str);        $str=preg_replace($this->patternforeach2,"<?php } ?>",$str);        return $str;    }    public function fors($str)    {        $str=preg_replace($this->patternfor1,"<?php for".'$1'."{ ?>",$str);        $str=preg_replace($this->patternfor2,"<?php } ?>",$str);        return $str;    }    public function ifs($str)    {        $str=preg_replace($this->patternif1,"<?php if".'$1'."{ ?>",$str);        $str=preg_replace($this->patternif2,"<?php } ?>",$str);        return $str;    }    public function elses($str)    {        $str=preg_replace($this->patternelse1,"<?php }elseif".'$1'."{ ?>",$str);        $str=preg_replace($this->patternelse2,"<?php }else{ ?>",$str);        return $str;    }}$view=new view();$number=range(1,26);$names=range('a','z');$names=array_combine($number,$names);$name='请选择';$i=54;$j=45;$view->compile('ok',$names,$name,$i,$j);

html

<!DOCTYPE HTML><html><head><meta charset="utf-8"><title>TEST</title></heade><body>单变量解析        {$name}<hr>foreach镶嵌if解析 <select>  @foreach($names as $key=>$value)<option value="{$key}" @if($key===5) selected='selected' @endif >{$value}</option> @endforeach </select> <hr> for 镶嵌if解析  <select>  @for($k=0;$k<=100;$k++)<option value="{$k}" @if($k===5) selected='selected' @endif >{$k}</option> @endfor </select> <hr> if else结构解析 @if($i<$j) $i<$j @elseif($i==$j) $i=$j @elseif($i>$j) $i>$j @endif <hr> 多层镶嵌解析 <ul> @foreach($names as $key=>$value) <li>{$value}     <ul>      @for($l=0;$l<100;$l++)         <li>{$l}          <ul>            @for($c=0;$c<20;$c++)             <li> @if($c==10)                <span style='color:red'>{$c}</span>                @else                {$c}             @endif             </li>             @endfor          </ul>         </li>      @endfor     </ul>     <li> @endforeach <ul><!--/请在上方写此页面业务相关的脚本--></body></html>