【发布时间】:2014-09-02 11:15:11
【问题描述】:
我想要一个可以这样使用的类:
Thing::doThis()->doThat()->doImportantThing();
或
Thing::doThat()->doImportantThing();
或
Thing::doImportantThing();
但目前我只能这样使用:
$thing = new Thing();
$thing->doThis()->doThat()->doImportantThing();
我必须在课堂上进行哪些更改才能以我想要的方式使用它?我已经在每个函数调用中返回了一个 Thing 实例。
我想使用它的原因很简单,想象一个邮件类,在构造函数中定义默认的 from 和 to,但你可能想要更改它,所以你这样做 Mail::setFrom()->send()。如果要更改为,请使用Mail::setTo()->send()。如果它要被不同的人在不同的项目中使用,它只会更容易使用。
我希望通过调用Mail::{something} 来进行构造函数调用,然后运行{something} 函数。
【问题讨论】:
-
我不禁想知道,为什么?
-
也许this 会有所帮助
-
@Sami 谢谢,但这个问题部分有帮助,但我想通过这个例子实现的是避免
getInstance()调用。 -
这个问题的真正答案是告诉你停止使用静态方法。
-
好吧,因为你需要一个实例(在任何健全的设置中)。更重要的是,它很可能会产生紧密耦合的代码,隐藏依赖关系,是维护和调试的噩梦,并且会扼杀可测试性。