在PHP中杀死方法链

时间:2014-07-12 17:41:01

标签: php methods method-chaining

嗨,我在php中的方法链有点像

<?php
auth::('username') -> is_logged() -> doSomething();
//execute something
?>

我想要做的是如果用户未登录则不调用doSomething()函数。一种方法是取消设置$ this,但这将产生一个错误ID,有任何其他方式来做到这一点。此外,我不能使用die(),因为它会停止编译器,并防止执行后写入的代码。最好的方法是什么,最好没有任何警告或错误,同时由于与班级相关的大量功能而尽可能少地做出改变。

1 个答案:

答案 0 :(得分:6)

返回NullObject,它将提供doSomething的空实现

在PHP中,您只需提供神奇的__call()方法,因此任何函数调用都将通过。

class NullObject {
    public function __call($name, $arguments) {
        return $this;
    }
}

在课堂上使用它:

public function is_logged() {
    if ($this->user_is_logged()) {
        return $this;
    } else {
        return new NullObject;
    }
}