在 PHP 中扩展 class 响应
Extend class response in PHP
我在一个使用 mySQL 和 SQLite 数据库的项目中工作。我的目标是使代码能够与两种数据库类型一起工作。我使用 mysqli
class 为 mySQL 开发了代码,现在我想修改它以使其也适用于 SQLite3
对象。
SQLite3
class 实现与 mysqli
相同的方法(至少,那些比我使用的方法),但有时使用不同的名称。例如,mysqli::fetch_array()
变为 SQLite3::fechArray()
。所以我正在扩展 SQLite3 和 SQLite3Result
classes 来实现我需要的方法。例如:
class SQLite3ResultEx extends SQLite3Result {
public function fetch_array() {
return parent::fetchArray();
}
}
问题是我不知道如何扩展 SQLite3
class 的响应以得到我自己的 SQLite3Response
扩展 class。我的意思是:
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
对象(我自己扩展的class)。
您可以尝试创建 $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;
}
}
一种方法是进一步抽象它,而不是扩展 SQLite3Result
,您可以创建一个新的 class 来接受 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);
}
我在一个使用 mySQL 和 SQLite 数据库的项目中工作。我的目标是使代码能够与两种数据库类型一起工作。我使用 mysqli
class 为 mySQL 开发了代码,现在我想修改它以使其也适用于 SQLite3
对象。
SQLite3
class 实现与 mysqli
相同的方法(至少,那些比我使用的方法),但有时使用不同的名称。例如,mysqli::fetch_array()
变为 SQLite3::fechArray()
。所以我正在扩展 SQLite3 和 SQLite3Result
classes 来实现我需要的方法。例如:
class SQLite3ResultEx extends SQLite3Result {
public function fetch_array() {
return parent::fetchArray();
}
}
问题是我不知道如何扩展 SQLite3
class 的响应以得到我自己的 SQLite3Response
扩展 class。我的意思是:
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
对象(我自己扩展的class)。
您可以尝试创建 $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;
}
}
一种方法是进一步抽象它,而不是扩展 SQLite3Result
,您可以创建一个新的 class 来接受 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);
}