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>