【问题标题】:how blade can access to defined varibles outside of itself刀片如何访问自身之外的已定义变量
【发布时间】:2016-07-28 06:58:28
【问题描述】:

我想用 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 访问变量 但是在刀片中编译的代码如下

<?php echo $bar; ?>

blade 如何通过名称直接访问已定义的变量?

【问题讨论】:

  • 查看 laravel 的源码
  • @CharlotteDunois laravel 太大,很难找到一个部分-我看了但找不到它们

标签: php global-variables blade template-engine


【解决方案1】:

我无法确认刀片是如何做到的,尽管我怀疑它会是这样,但基本上 extract 正是你所要求的:

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

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

【讨论】:

  • 如果我的问题只是获取变量,我可以使用我过去代码中使用的 $GLOBALS
  • 完全正确-阅读我的完整答案-extract 会将它们转换为$bar 而不是$GLOBALS['bar']。 Extract 将一组值插入 符号表
  • 不用担心。模板引擎好运
猜你喜欢
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 2017-08-19
  • 2021-12-23
  • 2019-02-19
  • 2018-11-26
  • 1970-01-01
相关资源
最近更新 更多