繁体   English   中英

扩展PHP中的类响应

[英]Extend class response in PHP

我正在使用mySQL和SQLite DB的项目中工作。 我的目标是使代码能够同时使用两种数据库类型。 我使用mysqli类为mySQL开发了代码,现在我想对其进行修改以使其也可用于SQLite3对象。

SQLite3类实现与mysqli相同的方法(至少,与我使用的方法相同),但有时使用不同的名称。 例如, 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对象(我自己的扩展类)。

一种方法是进一步抽象它,而不是扩展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);
}

您可以尝试创建$ 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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM