PHP使用静态变量和函数扩展类

时间:2012-11-25 02:34:32

标签: php inheritance static

我有一个问题,很多,但是这一个特别涉及以下内容:

我有一个我构建的数据库连接类 - 仔细地从我所知道的内容和诸如此类的帖子中获取点点滴滴 - 利用静态变量进行连接。以下是该课程的片段:

class DatabaseConnection {
private static $dbconn;
private static $conn;
private $user;
private $pass;

public static function getInstance ( ) {
    if ( !self::$dbconn )   {
        self::$dbconn = new self();
    }
    return self::$dbconn;
}

...
...

public function getConnection()
{

    if ( $this->conn ) 
    { 
        return $this->conn ;
    }
    if (!$this->detailsSet) return null;
    try {       
        self::$conn = new PDO ($this->dsn, $this->user, $this->pass, $this->options);
        foreach ( $attributes as $k => $v ) {
            self::$conn -> setAttribute ( constant ( "PDO::{$k}" ), constant ( "PDO::{$v}" ) ) ;
        }
        return self::$conn ;
    }
    catch (Exception $e) {
        return null;    
    }
}
...
...

}

我现在要做的是扩展这个类,以便具体了解可以执行的操作。例如,我有一个名为UserRecordUpdater的类。这是一个片段:

class UserRecordUpdater extends DatabaseConnection
{
public static function getInstance ( ) {
    if ( !self::$dbconn )   {
        self::$dbconn = new self();
    }
    return self::$dbconn;
}

public function addUser($newUser)
{
...
}
...
...
}

所以,如果你不能破译我正在尝试做的事情,那么我正在努力创建一些新的类(例如上面的子类),它们将利用父类中创建的现有静态连接,但会有自己特定的操作。

以下是我从主脚本调用此代码的方法:

include_once('./library/DatabaseConnection.php');
include_once('./library/UserRecordUpdater.php');

...

$userUpdater = UserRecordUpdater::getInstance();

...

$userUpdater->addUser($someuser);

请假设...之间的代码正常工作......

现在,所有这些都说,我收到了错误:

PHP Fatal error: Cannot access property UserRecordUpdater::$dbconn in /path/UserRecordUpdater.php

错误指向子类中的行:if ( !self::$dbconn )

现在,在指出显而易见的(这是$ dbconn在父母中,所以我应该使用parent::$dbconn之前,请注意我已经尝试了这个,我知道它不会起作用。这绝对是我的缺乏对继承的理解加上我对静态变量的理解不足。但至少希望我的解释足够清楚,以便得到一个答案,即“正确”的方式是什么(或者至少是一种正确的方式)。 / p>

0 个答案:

没有答案