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>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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值