我一直在玩一些PHP類,只是試圖學習,但這個有我抓我的頭,經過大量的搜索和谷歌我似乎無法找到任何涵蓋這個問題(也許我不正確的說法搜索)。之前的配置類使用自己的pdo連接,所以我期待確保它不會每次打開一個新的連接,還有另一個類沒有在這裏顯示,但以相同的方式完成,這似乎工作。以下是錯誤:在另一個類中調用db類
Call to a member function query() on a non-object in config.class.php on line 15
唯一的區別我可以看到,可能會導致該是配置類運行結構中的查詢,其中作爲我的其他類不,這是一個問題,如果是的話,爲什麼?
已經嘗試了幾個不同的東西,但說實話,我只是不明白..只有從在線資源學習PHP。任何有關這方面的閱讀材料也將不勝感激。
一直用這個DB類: https://github.com/indieteq/PHP-MySQL-PDO-Database-Class
class Config
{
public $db;
private $config;
public function __construct()
{
global $db;
$this->db = $db;
$this->config = array();
$rows = $this->db->query("SELECT * FROM config");
foreach($rows as $row) {
$this->config[$row['setting']] = $row['value'];
}
}
public function __get($setting)
{
return $this->config[$setting];
}
public function __set($setting, $value)
{
$update = $this->db->query("UPDATE config SET value = :value WHERE setting = :setting", array("value"=>$value,"setting"=>$setting));
if($update > 0) {
$this->config[$setting] = $value;
return true;
} else {
return false;
}
}
}
的所有類都要求一個文件:
require(INCLUDE_PATH . "Db.class.php");
include(INCLUDE_PATH . "languages\\en.php");
include(INCLUDE_PATH . "config.class.php");
$db = new Db();
$config = new Config();
不要使用'全局變量$ db',因爲它可能給你造成一個範圍問題。相反,將'$ db'變量傳遞給'Config :: __ construct()'。在構造函數中添加一個參數並使用'$ config = new Config($ db);'(稱爲「依賴注入」)在此之前,在調用'new Db()'之後執行'var_dump($ db)以確保該對象已創建。 –
@MichaelBerkowski感謝這個作品的完美!,我給了你一個投票:) – Izion