我开始使用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