【问题标题】:kill method chain in phpphp中的kill方法链
【发布时间】:2014-07-12 17:41:00
【问题描述】:

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

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

我想做的是,如果用户没有登录,那么不要调用 doSomething() 函数。一种方法是取消设置 $this ,但这会在任何其他方法中生成错误 ID。我也不能使用 die() 因为它会停止编译器并阻止之后编写的代码执行。最好的方法是什么?最好没有任何警告或错误,同时由于与类相关联的大量函数而尽可能少地进行更改。

【问题讨论】:

    标签: php methods method-chaining


    【解决方案1】:

    返回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;
        }
    }
    

    【讨论】:

    • 在 PHP 中它正在生成一个致命错误,在非对象上调用成员函数 doSomething()
    • @georoot 这不是空对象。空对象是具有相同接口但为空实现的对象。
    • 我不确定。你想让我为当前类初始化一个新对象吗?如果不能,请编辑我发送的代码并解释。谢谢
    • 他不是指(object)null。他的意思是new NullObject
    • 我检查了它,我认为我的 php 它被称为 stdClass。当我处理它时,它显示对未定义方法的调用。它在 php 中还有其他调用方式吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多