刀片如何访问自身之外的已定义变量

时间:2016-07-28 06:58:29

标签: php global-variables blade template-engine

我想用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; ?>

刀片如何直接使用其名称访问已定义的变量?

1 个答案:

答案 0 :(得分:1)

我无法确认刀片是如何做到这一点的,虽然我怀疑它会是这样,但基本上提取物就是你所要求的那样:

http://php.net/manual/en/function.extract.php

它需要一组变量并直接插入符号表中,以便直接访问它们。与get_defined_variables()结合使用会变得非常有用。