我有一个问题,嗯,很多,但这个问题特别涉及以下内容:
我有一个我已经构建的数据库连接类 - 仔细从我所知道的内容和诸如此类的帖子中获取点点滴滴 - 它利用静态变量进行连接。这是该课程的一个片段:
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);
请假设...
's 之间的代码工作正常...
现在,这一切都说,我得到了错误:
PHP Fatal error: Cannot access property UserRecordUpdater::$dbconn in /path/UserRecordUpdater.php
错误指向行:if ( !self::$dbconn )
在子类中。
现在,在指出明显的(即 $dbconn 在父级中,所以我应该使用之前parent::$dbconn
,请注意我已经尝试过这个,我知道它不会起作用。这绝对是我对继承缺乏了解以及我的缺乏对静态变量的理解但至少希望我的解释足够清楚,可以回答什么是“正确”的方法(或至少一种正确的方法)。