私はこのようなことをしたいです:
$table_object->getRows()->where($wer)->or($or)->orderBy('field', 'DESC');
すべてのメソッドが毎回その順序で呼び出されることが確実な場合、それは簡単であり、各メソッド呼び出しでオブジェクト自体のインスタンスを返すことができるため、クエリがビルドされ、最終的にorderByメソッドで実行されます。ただし、クラスで次のようなクエリも実行できるようにする必要があります。
$table_object->getRows()->where($wer);
次のコードは、最初のコード例(つまり、すべてのメソッドが呼び出された場合)では機能しますが、getRowsの後にメソッドのみが呼び出される2番目のコード例では機能しません。それ自体のインスタンスのみを返します。
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);
}
}
すべてのマイナーエラーを無視します-(確実に機能するかどうかは確認しませんでしたが、機能するはずです)。どうすればこれを達成できますか?