天天看點

blade模闆引擎模仿

blade模闆模仿

<?php
class 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>){
                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(,);
$names=range('a','z');
$names=array_combine($number,$names);
$name='請選擇';
$i=;
$j=;
$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===) selected='selected' @endif >{$value}</option>

 @endforeach
 </select>
 <hr>
 for 鑲嵌if解析
  <select> 
 @for($k=;$k<=;$k++)

<option value="{$k}" @if($k===) 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=;$l<;$l++)
         <li>{$l}
          <ul>
            @for($c=;$c<;$c++)
             <li> @if($c==)
                <span style='color:red'>{$c}</span>
                @else
                {$c}
             @endif
             </li>
             @endfor
          </ul>
         </li>
      @endfor
     </ul>
     <li>
 @endforeach
 <ul>
<!--/請在上方寫此頁面業務相關的腳本-->
</body>
</html>