2016-07-28 24 views
3

我想創建一個PHP的正則表達式的模板引擎刀片如何訪問到定義的可變因素之外的自身

我的模板引擎是下面的代碼

<?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; ?> 

如何刀片可以用自己的名字直接訪問定義瓦爾?

+0

查找到laravel的源代碼 –

+0

@CharlotteDunois laravel過大,有一節很辛苦-I看了,但沒能找到 –

回答

1

我無法確認這是刀片是怎麼做的,但我懷疑這會是這樣,但基本上不提取這正是你在問:

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

它需要一個數組變量並直接插入符號表中,以便直接訪問它們。與get_defined_variables()結合使用會變得非常有用。

+0

如果我的問題只是得到可變因素,我可以使用,在我過去的代碼中使用$ GLOBALS –

+0

正確 - 讀取我的*整個*答案 - 'extract'會將它們轉換爲'$ bar'而不是'$ GLOBALS ['bar']'。 Extract將一個數組值插入*符號表* – Chris

+0

這真是太棒了!非常感謝 –