我想用php regex
创建一个模板引擎我的模板引擎是以下代码
<?php
class tmp
{
public function assign($name,$val){
$GLOBALS[$name]=$val;
}
public function compile($buffer){
$buffer= '?> '.preg_replace('~\{\!\!\s*\$(\w+)\s*\!\!\}~', '<?php echo $GLOBALS["$1"]; ?>', $buffer);
file_put_contents('compiled.php', $buffer);
return $buffer;
}
public function run($run){
return eval($run);
}
}
?>
我的主题是以下代码
{!! $bar !!}
和编译的主题是
?>
<?php echo $GLOBALS["bar"]; ?>
我使用$ GLOBALS访问vars 但在刀片中编译的代码如下
<?php echo $bar; ?>
刀片如何直接使用其名称访问已定义的变量?
答案 0 :(得分:1)
我无法确认刀片是如何做到这一点的,虽然我怀疑它会是这样,但基本上提取物就是你所要求的那样:
http://php.net/manual/en/function.extract.php
它需要一组变量并直接插入符号表中,以便直接访问它们。与get_defined_variables()
结合使用会变得非常有用。