如果我的标题不清楚,我很抱歉,请让我解释一下…
我有一个模板类调用'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);
}
}
}