2013-03-21 62 views
0

我的道歉,如果我的標題是不明確的,請讓我解釋...PHP:類間傳遞動態變量

我有一個模板類呼叫「頁」,當我初始化它,我可以將它設置成通過設置$模式進入調試模式。

問題是我也有一個數據庫類,我想分享一個事實,即'頁面'處於調試模式,但不知道最好的辦法做到這一點......我不能有'頁面'擴展'db',沒有'page'實際調用'db'類的地方。它始終在其他課程上發生。

再次,對不起,如果你不清楚這個......我試圖提供的代碼,以幫助的一個非常簡單的版本...

class page { 
    public $mode; // what mode the page is in (debug/normal) 

    public function __construct($constructVars) { 
     $this->mode = $constructVars["mode"]; //debug 
    } 

    public function debug($message){ 
     if ($this->mode == "debug"){ 
      $fh = fopen("debug.txt", 'a') or die("can't open debug file"); 
      fwrite($fh, date("Y-m-d H:i:s")." : ".$message."\n"); 
      fclose($fh); 
     } 
    } 
} 

class db extends PDO { 
    public function debugOutput() { 
     $page = new page(); 
     if ($page->mode == "debug"){ 
      $fh = fopen("debug.txt", 'a') or die("can't open debug file"); 
      fwrite($fh, $message."\n"); 
      fclose($fh); 
     } 
    } 
} 

只是重申,因爲我認爲這是要去答案來了,我不能擴大頁面,包括數據庫。

+1

份額的事實,它在調試模式與誰? – Brad 2013-03-21 23:42:26

+2

實際代碼有什麼問題? – 2013-03-21 23:46:17

+0

您正在訪問db類中的頁面類中的mode變量。你在哪裏難以獲得模式? – 2013-03-21 23:58:21

回答

-1

我會用一個靜態類來存儲全局訪問這樣的東西:

class SystemState{ 
    public static $debugMode = false; // what mode the page is in (debug/normal) 
} 

class page { 

    public function __construct($constructVars) { 
     if($constructVars["mode"] == 'debug'){ 
      SystemState::$debugMode = true; 
     } 
    } 

    public function debug($message){ 
     if (SystemState::$debugMode){ 
      $fh = fopen("debug.txt", 'a') or die("can't open debug file"); 
      fwrite($fh, date("Y-m-d H:i:s")." : ".$message."\n"); 
      fclose($fh); 
     } 
    } 
} 

class db extends PDO { 
    public function debugOutput() { 
     if (SystemState::$debugMode){ 
      $fh = fopen("debug.txt", 'a') or die("can't open debug file"); 
      fwrite($fh, $message."\n"); 
      fclose($fh); 
     } 
    } 
} 
+0

是否可以將公共靜態$ debugMode移動到類頁面中並設置一個靜態方法從db類中檢索它?謝謝你的幫助?顯然,我不完全理解不同的類數據類型......我對OOP仍然很陌生。 – hendr1x 2013-03-22 00:55:31

+0

我剛纔看到我的答案中有一個「錯誤」:'db'類中不再需要'$ page = $ new page()' – ITroubs 2013-03-22 11:17:00

+1

Static方法和Variable綁定到Class本身,而常規方法和變量總是綁定到該類的一個實例。當然,你可以將這個靜態變量移動到你的頁面類,並以靜態方式獲取/設置該變量,就像我在SystemState中一樣。你只需要在你的頁面上添加'public static $ debug',然後用'Page :: $ debug'替換'SystemState :: $ debugMode'頁面類可以通過'$ this-> debug'來訪問它,或者'Page :: - > $ debug' – ITroubs 2013-03-22 11:19:22

0

你可以只通過$pagedb::debugOutput()

class db extends PDO { 
    public function debugOutput(page $page) { 
     if ($page->mode == "debug"){ 
      $fh = fopen("debug.txt", 'a') or die("can't open debug file"); 
      fwrite($fh, $message."\n"); 
      fclose($fh); 
     } 
    } 
} 

$page = new page(array('mode' => 'debug')); 
// ... 
$db->debugOutput($page); 
+0

我得到了這個工作,謝謝。我希望找到一種方法來做到這一點,而不需要將參數傳遞到數據庫....也就是說,我希望有一種方法可以直接從類中讀取$ page-> mode到db中。我會繼續檢查這個線程,但我認爲這是不可能的。 – hendr1x 2013-03-22 13:52:20