我開始使用PHP類並查看OOP。正確地與PHP類/函數進行交互? (OOP)
我通過創建一個數據庫類,它看起來是這樣的(片段)發揮各地:
class Database
{
private $link;
private $result;
private $count;
function connect()
{
$this->link = mysql_connect(DB_HOST, DB_USER, DB_PW);
$return = $this->link ? 'Connected to database.' : 'Failed to connect.';
$this->open(); // I have another function in this class to select the db
echo $return;
}
function query($query)
{
$this->result = mysql_query($query);
}
function fetch()
{
return mysql_fetch_assoc($this->result);
}
function count()
{
$this->count = mysql_num_rows($this->result);
return $this->count;
}
}
只是爲了測試,我創建了另一個類叫做留言,看起來像這樣:
class Guestbook
{
function fetch()
{
Database::query('SELECT * FROM guestbook LIMIT 2');
while($row = Database::fetch()){
$result_array[] = $row;
return $result_array;
}
}
現在我測試了這個功能:
$db = new Database();
$db->connect();
$db->query('SELECT * FROM test');
while($row = $db->fetch()) {
echo $row['id'].'<br />';
}
echo $db->count();
$db->close();
這個按預期工作。因此,我還是繼續進行留言類:
$db->connect();
$guestbook = new Guestbook();
$results = $guestbook->fetch();
foreach($results as $gb) {
echo $gb['id'];
}
echo $db->count(); // HERE'S MY PROBLEM !
$db->close();
一切正常,我想,但我第二次打電話$db->count()
它回聲前一計,而不是2(爲我設定的限制2在留言取功能)。
我如何使用這些類正確的交互,這樣我就可以使用類似$db->count()
全球?
在此先感謝您提供任何提示或解決方案!
你爲什麼要靜態地從調用數據庫的模式你留言分類?如果你想靜態使用它,你應該聲明它,並且只能像這樣使用它:) 我建議製作數據庫單例。 – 2012-03-02 14:17:01
問題在於這裏混合了靜態和對象調用。將它規範化,以便在任何地方使用靜態或對象。建議看看Singleton模式。 – 2012-03-02 14:25:32
另一件事是,你通常會保留在留言簿類中的所有內容。您可以調用$ guestbook-> getPosts(),它通過一個私有或受保護的getDataRow()方法獲取所需的數據,該方法將數據設置爲留言簿中的受保護變量,以便您可以多次訪問它而不必每次都訪問數據庫。 – 2012-03-02 14:29:00