php - Blade 如何访问自身之外的已定义变量

标签 php global-variables laravel-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 访问变量 但是在blade中编译后的代码如下

<?php echo $bar; ?>

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

最佳答案

我无法确认 blade 是如何做到的,尽管我怀疑它会是这样,但基本上 extract 确实按照您的要求做到了:

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

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

关于php - Blade 如何访问自身之外的已定义变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38629164/

相关文章:

php - 更改mysql表中多个单元格的值

javascript - 如何创建javascript全局可访问的静态变量?

java - Android:访问 onClickListener 中的全局变量

php - 如何从 Blade 模板内访问类变量

php - 用ajax请求渲染多个blade view sections

php - 用或显示多阵列数据的 Blade

php - mySQL - 如何根据指定列是否包含指定值来列出行?

php - 在 PHP 中显示 mysql 表而不知道总列数

php - 获取目录的最后修改时间

java - 如何在两个不同的窗口中识别全局变量(Java Swing GUI)