Я хочу иметь возможность сделать что-то вроде этого:
$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);
}
}
Игнорировать все незначительные ошибки - (я не проверял, сработало ли оно наверняка, но должно.) как мне этого добиться?