0

私には問題がありますが、特にこれには次のような問題があります。

私が構築したデータベース接続クラスがあります-私が知っていることやこのような投稿から慎重に断片を取り出して-接続に静的変数を利用します。クラスの抜粋は次のとおりです。

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。これを試しましたが、機能しないことがわかっています。これは、継承と私の組み合わせに関する理解の欠如です。静的変数の理解の欠如。しかし、少なくとも私の説明が、これを行うための「正しい」方法(または少なくとも1つの正しい方法)についての答えを得るのに十分明確であることを願っています。

4

0 に答える 0