PHP:类之间传递的动态变量

时间:2013-03-21 23:39:25

标签: php class

如果我的标题不清楚,请向我道歉,请让我解释一下......

我有一个模板类调用'page',当我初始化它时,我可以通过设置$ mode将它设置为调试模式。

问题是我还有一个数据库类,我想分享一个事实,'page'处于调试模式但不知道最好的方法...我不能'page'extends' 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);
        }
    }
 }

重申一下,因为我认为这是即将出现的答案,我无法扩展页面以包含db。

2 个答案:

答案 0 :(得分:0)

您可以将$page传递给db::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);

答案 1 :(得分:-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);
        }
    }
 }