【发布时间】:2010-01-30 19:06:41
【问题描述】:
我试图弄清楚什么时候一个类同时具有静态和非静态函数是合适的。又名:
$obj = new ClassA;
$obj->doOOPStuff();
$something = ClassA::doStaticStuff();
注意:这个例子是用 PHP 完成的,但是问题是语言不可知的。
似乎如果您有一个要实例化的类,那么任何可以静态调用的函数很可能属于另一个类。
在任何可行的情况下,我会有一个使用静态和非静态成员的类吗?
【问题讨论】:
-
这是我见过的一种模式:
class Frob { void tweak() {...} static void tweakIfNotNull(Frob f) { if (f != null) f.tweak(); } }当方法需要递归地应用于大数据树中的每个节点时,这主要是方便的。像 serialize() 或 dispose()。每个类对其子类使用 ifNotNull 版本。 -
我见过的另一种模式是静态方法基本上是类其余部分的外观。 en.wikipedia.org/wiki/Facade_pattern
-
“静态”的概念与语言无关,它只针对少数几种语言,即使在这组语言中,最佳实践也各不相同。
标签: language-agnostic oop