一种想法是建立内部国旗,以表明成功或失败,并通过另一种方法加以利用,同时在每种方法中核对这一旗帜,如果它有的话,则不做任何事情。 例如:
class A {
private $valid = true;
public function check1() {
if (!$this->valid) {
return $this;
}
if (!/* do actual checking here */) {
$this->valid = false;
}
return $this;
}
public function check2() {
if (!$this->valid) {
return $this;
}
if (!/* do actual checking here */) {
$this->valid = false;
}
return $this;
}
public function isValid() {
return $this->valid;
}
}
// usage:
$a = new A();
if (!$a->check1()->check2()->isValid()) {
echo "error";
}
为了尽量减少每项功能的碎块检查,你还可以使用灵丹妙药(<>条码/代码>。 例如:
class A {
private $valid;
public function __call($name, $args) {
if ($this->valid) {
$this->valid = call_user_func_array("do" . $name, $args);
}
return $this;
}
private function docheck1() {
return /* do actual checking here, return true or false */;
}
private function docheck2() {
return /* do actual checking here, return true or false */;
}
public isValid() {
return $this->valid;
}
}
使用量与上文相同:
$a = new A();
if (!$a->check1()->check2()->isValid()) {
echo "error";
}