2014-10-08 118 views
0

我想在與需要它運行的文件相同的文件上運行模板引擎,因此我使用了模板引擎,它使{username}變成了HTML中的PHP變量與處理它的所有內容在同一頁面上。但是,如果我嘗試這樣做,我得到一個類已被稱爲錯誤,我已經嘗試修復這個錯誤,但這是我得到的最接近,有無論如何修復這個錯誤?這裏是我的代碼:檢查PHP類是否已被調用

<?php 

//error_reporting(0); 

if(in_array('NewTemplateHandler', get_declared_classes())) 
{ 

    $template = new NewTemplateHandler("test4.php"); 
    $template->output(); 
    //echo "Template has not been called"; 

}else 
{ 

    echo "Else called"; 

} 

class NewTemplateHandler 
{ 

    protected $file; 
    protected $values = array(); 

    public function __construct($file) 
    { 

     //$_GLOBALS["ran"] = true; 
     $this->file = $file; 
     $this->__set("test", "Template Working"); 
     echo "Template Class Called."; 

    } 

    public function __set($key, $value) 
    { 

     $this->values[$key] = $value; 
     echo "$key set as $value<br />"; 

    } 

    public function output() 
    { 

     if(!file_exists($this->file)) 
     { 

      echo "ERROR: Template file not found."; 

     } 

     $output = file_get_contents($this->file); 

     foreach($this->values as $key => $value) 
     { 

      $find = "{".$key."}"; 
      $output = str_replace($find, $value, $output); 

     } 

     //$_GLOBALS["ran"] = true; 
     return eval("?>".$output); 

    } 

} 

?> 

<br /> 
Thing-> {test} 
+1

'if(in_array('CLASS NAME',get_declared_classes())){.....'是你想要的。 – Darren 2014-10-08 04:10:29

+0

@Darren非常感謝你,它完美的工作,我不得不添加一個error_reporting(0);擺脫另一個班級被稱爲錯誤,但它做我需要做的事情。請將其寫爲答案,以便我可以接受。 – M4TRIX 2014-10-08 04:17:23

+0

@Darren唯一的問題是,我不得不把它放在頁面的頂部,並且它正在無限重複。 – M4TRIX 2014-10-08 04:38:28

回答

1

這就是你需要的。

if(!in_array('NewTemplateHandler', get_declared_classes())) { 
    $template = new NewTemplateHandler("test4.php"); 
    $template->output(); 
} 

你之前在做什麼是這樣的:

IF 
    (TRUE) 
THEN 
    START NEW TEMPLATE 
ELSE 
    ECHO "Else called" 

你想要做的是檢查是否不是get_declared_classes()數組中什麼。

+0

這樣就不會調用__construct函數(或類)。我應該放棄這個想法嗎? – M4TRIX 2014-10-08 06:28:25

+0

如果這是您使用它的代碼,那麼您根本不需要檢查?只需啓動課程並運行操作。 – Darren 2014-10-08 06:42:33

+0

我正在運行eval(「?>」。$ output);所以它實際上重新包含相同的文件,並且如果它重新包含相同的文件,它將重新聲明相同的類,並且如果它重新聲明相同的類,則會出現致命錯誤xD,您能否看到問題我有這個嗎?它讓我難以置信,直到我質疑它的使用。 – M4TRIX 2014-10-08 07:28:54