我有一个问题,很多,但是这一个特别涉及以下内容:
我有一个我构建的数据库连接类 - 仔细地从我所知道的内容和诸如此类的帖子中获取点点滴滴 - 利用静态变量进行连接。以下是该课程的片段:
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>