【问题标题】:Simple error checking in PHP class function chaining?PHP类函数链接中的简单错误检查?
【发布时间】:2011-06-03 21:39:22
【问题描述】:

我在链接类函数中发现了一些有限的用途,比如$class->setUser('foo')->getInfo()(不好的例子),尽管我无法理解如何处理链中调用之一引起的任何错误。

例如,如果setUser() 出现错误并返回false,则它不会返回$this 并且不允许调用另一个函数,从而显示错误。

我刚刚意识到的(如果这是错误的,请纠正我),如果setUser() 中出现错误会引发异常,以防止以下getInfo() 函数运行并发出错误?

这至少是有用的知识,这样我就可以调试使用链接的代码,即使我不使用它。

【问题讨论】:

    标签: php oop exception-handling method-chaining


    【解决方案1】:

    是的,在这种情况下,抛出异常可能是个好主意。您将能够查明错误发生在链中的位置。

    这是一个如何工作的示例:

    try
    {
        $class->setUser('foo')->getInfo();
    }
    catch(UnknownUser $ex)
    {
        // setUser failed
    }
    catch(CannotFetchInfo $ex)
    {
        // getInfo failed
    }
    

    【讨论】:

    • 我很欣赏这个例子,谢谢蒂姆。如果有人问,我会更有信心解释这一点。
    【解决方案2】:

    与任何链一样:如果一个元素被破坏,则整个链都会被破坏。

    因此,如果您要链接对象,一方面这可能非常容易访问,另一方面,如果由于错误(例如远程连接、文件等)而导致事情失败,则链接变得很尴尬。

    因此,除非事情没有返回预期的响应类型而是发出失败的信号,否则异常会有所帮助,但在链中断时,其用途有限。

    但是,我认为抛出异常是您可以为错误处理做的最好的事情(在链中用于开发自己的代码)。

    抛出异常的好处如下:您不需要破坏使链可访问的语法。

    假设您的代码出错了。最好抛出异常,因为无论如何你都需要修复它。

    或者假设数据层已经被编码,它经常失败。抛出一个异常,你就知道需要更多爱的部分了。

    在具有链接的通用代码中,这些exceptions 会打断你(你总是可以捕捉到它们,顺便说一句,你可以turn errors into exceptions as well),但它们会指出你可能会出错的原因还没有想太多。

    所以,

    1. 异常是链错误处理的一种方式
    2. 异常可帮助您定位各种错误来源,同时您可以维护链式语法以实现更高级别的数据访问。

    然而,无论链接做得多么好,它都不再有意义(我应该添加“与所有内容一样”;))。我不会说我是一个真正的链接迷,但即使作为一个非迷,我也会不时在我自己的代码中使用这个原则。它可以创建易于编写的代码,因此使用异常进行错误处理,我没有遇到任何“真正的”(tm)问题。这比用虚假或类似的废话打破你的链条要好得多。

    理论上,您可以通过重载返回一个接受任何属性/成员调用 set/get 的对象,但即使这很有趣,我认为它只会引入更多的复杂性,而不是有助于处理实际的现实生活错误。

    因此,如果您链​​接到错误中,您实际上会在使用异常时看到错误。这就是例外情况:由于错误(或信号,也可以)中断应用程序的标准处理。

    【讨论】:

    • 谢谢你的这个 Hakre,我希望我能 +1,虽然我在注册时遇到了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多