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