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


PHP : Dynamic Variable Passed Between Classes

如果我的标题不清楚,我很抱歉,请让我解释一下…

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

问题是我也有一个数据库类,我想分享的事实是,"页"是在调试模式,但不知道最好的方法来做到这一点…我不能有'页'扩展'db',没有'页'实际上调用'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。

你可以把$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);

我会使用静态类来存储全局可访问的东西,像这样:

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);
        }
    }
 }