我希望能够做这样的事情:
$table_object->getRows()->where($wer)->or($or)->orderBy('field', 'DESC');
如果我确定每次都按该顺序调用所有方法,那么它会很简单,我可以在每次方法调用时返回对象本身的实例,以便构建查询并最终在 orderBy 方法处执行。但是我希望该类也能够执行如下查询:
$table_object->getRows()->where($wer);
以下代码适用于第一个代码示例(即调用所有方法时),但不适用于第二个代码示例,其中只有在 getRows 之后调用的方法。它只返回一个自身的实例。
class DatabaseTable extends Database
{
protected $table_name;
protected $query;
public function getRows()
{
return ($this instanceof self)? $this : false;
}
public function where(array $where)
{
foreach ($where as $field => $value){
$w[] = $field . ' = "' . $this->escapeString($value) . '"';
}
$this->query = "SELECT * FROM {$this->table_name} WHERE " . join($w, ' AND '));
return $this;
}
public function or(array $Clause)
{
foreach ($clause as $field => $value){
$o[] = $field . ' = "' . $this->escapeString($value) . '"';
}
$this->query .= join($w, ' AND ');
return $this;
}
public function orderBy($field, $type)
{
$this->query .= " ORDER BY $field $type ";
$this->executeQuery($this->query);
}
}
忽略所有小错误 - (我没有检查它是否确实有效,但它应该。)我怎样才能做到这一点?