0

私は mySQL と SQLite DB を使用するプロジェクトに取り組んでいます。私の目標は、コードが両方のデータベース タイプで動作できるようにすることです。クラスを使用して mySQL のコードを開発しましたが、オブジェクトmysqliでも動作するように変更したいと考えていSQLite3ます。

SQLite3mysqliクラスは(少なくとも私が使用するものとは)同じメソッドを実装しますが、異なる名前を使用することもあります。たとえば、 にmysqli::fetch_array()なりSQLite3::fechArray()ます。そこで、必要なメソッドを実装するために SQLite3 とSQLite3Resultクラスを拡張しています。例えば:

class SQLite3ResultEx extends SQLite3Result {
    public function fetch_array() {
        return parent::fetchArray();
    }
}

SQLite3問題は、クラスの応答を拡張して独自のSQLite3Response拡張クラスを取得する方法がわからないことです。つまり:

class SQLite3Ex extends SQLite3 {
    public function __construct($filename, $flags = null, $encryption_key = null) {
        return parent::__construct($filename, $flags, $encryption_key);
    }

    public function query($query) {
        $res = parent::query($query);
        return $res;
    }
}

$resはオブジェクトですが、オブジェクト(自分の拡張クラス)SQLite3Resultになる必要があります。SQLite3ResultEx

4

2 に答える 2

1

1 つの方法は、 を拡張するのではなく、もう少し抽象化することです。オブジェクトSQLite3Resultを受け入れる新しいクラスを作成SQLite3Resultし、結果にプロキシする独自のメソッドを提供できます。

class myResults
{
    /**
     * @var SQLite3Result
     */
    protected $result;

    /**
     * Constructor
     * @param SQLite3Result $result
     */
    public function __construct(SQLite3Result $result)
    {
        $this->result = $result;
    }

    /**
     * Fetch array of results
     * @return array
     */
    public function fetch_array()
    {
        return $this->result->fetchArray();
    }

    // Any other methods you need
}

次に、SQLite3Ex::queryメソッドは次のようになります。

/**
 * Preform query
 * @param string $query
 * @return myResults
 */
public function query($query)
{
    $res = parent::query($query);
    return new myResults($res);
}
于 2015-04-21T08:46:42.397 に答える
-1

サブクラスの特定のパラメーターとして $res を作成してみて、それを直接参照することができます

$this->res = ...

サブクラスが次のようになるようにします。

class SQLite3Ex extends SQLite3 {
 private $res;
    public function __construct($filename, $flags = null, $encryption_key = null) {
        return parent::__construct($filename, $flags, $encryption_key);
    }

    public function query($query) {
        $this->res = parent::query($query);
        return $res;
    }
}
于 2015-04-21T08:11:51.563 に答える