2013-10-21 142 views
0

我需要發送$用戶到類內部並渲染函數使其成爲全局變量。將變量轉換爲全局類。 。 .PHP?

因爲它不工作,除非我在類和渲染函數中寫入「$ user」。

請幫幫我。

$user = 'admin'; 

class Template{ 
public function render($template_name) 
{ 
    global $user; 
    $path = $template_name . '.html'; 
    if (file_exists($path)) 
    { 
     $contents = file_get_contents($path); 

     function if_condition($matches) 
     { 
      $parts = explode(" ", $matches[0]); 

      $parts[0] = '<?PHP if('; 
      $parts[1] = '$' .$parts[1]; // $page 
      $parts[2] = ' ' . '==' . ' '; 
      $parts[3] = '"' . substr($parts[3], 0, -1) . '"'; //home 
      $allparts = $parts[0].$parts[1].$parts[2].$parts[3].') { ?>'; 
      return $allparts.$gvar; 
     } 

     $contents = preg_replace_callback("/\[if (.*?)\]/", "if_condition", $contents); 
     $contents = preg_replace("/\[endif\]/", "<?PHP } ?>", $contents); 

     eval(' ?>' . $contents . '<?PHP '); 
    } 
} 

} 

$template = new Template; 
$template->render('test3'); 
+0

爲什麼不建立一個構造函數來設置變量? –

+0

基本上,請參閱Alma Do Mundos的答案 –

回答

2

永遠,永遠使用全局變量

他們是可怕的,他們是你的代碼綁定到上下文和它們的副作用 - 如果你在2054條線的某處改變你的變量第119個包含的文件,您的應用程序的行爲將會改變,然後祝您好運並調試。

相反,你應該要麼通過你的用戶在方法的參數:

public function render($template_name, $user) 

或類實例創建屬性:

class Template 
{ 
    protected $user = null; 

    public function render($template_name) 
    { 
    //access to $this->user instead of $user 
    } 
    //... 
} 

-and,當然,在constructor類初始化$user屬性。