Ответ OIS действительно хороший, хотя я мог видеть, что он может запутаться, если объект вдруг изменится на что-то другое. То есть вы ожидаете, что в конце вашей цепочки у вас будет тот же объект. Чтобы избежать этой проблемы, я бы добавил приватную переменную, чтобы сообщить классу, делать ли что-либо на самом деле. Если класс был остановлен, то каждый класс просто сразу возвращает $this
. Это дает вам дополнительное преимущество возможности перезапустить выполнение.
class MyClass {
private $halt;
function __call($func, $args) {
if ($this->halt) {
return $this;
} else {
return $this->$func($args);
}
}
private function isRequestParameter() {
// ...
}
public function stop() {
$this->halt = true;
}
public function start() {
$this->halt = false;
}
}
Это может быть помещено в родительский класс, поэтому вам не нужно дублировать этот код.