写一个PHP应用程序,还有好几类,只有具有静态方法(无需实例方法)。一个例子是NumericValidator
,其中有像checkInteger($toCheck)
方法进行检查,确保参数传递给它的类型是int,和checkGreaterThan($lOperand, $rOperand)
,这确保了左操作数大于右操作数越大,等纯静态类VS辛格尔顿
我知道我可以只是扔每种方法到PHP文件,而不把它们一个类里面,但我想万一API发展到需要实例NumericValidator
在这里采取的OOP方法。
但说实在的问题:怎么是100%的静态方法比有一个类实现一个Singleton设计模式,在整个代码库中使用的每个引用调用相同的实例有什么不同的一类?
例如,这里是我的代码看起来像现在:
public function doSomething($p_iNum)
{
if(!NumericValidator::checkInteger($p_iNum))
// throw IllegalArgumentException
// ...
}
但我可以把所有的NumericValidator
的静态方法到非静态实例方法,迫使程序员实例化,然后执行一个Singleton设计模式,所以你永远只能参考它的1个实例:
public function doSomething($p_iNum)
{
NumericValidator $nv = NumericValidator::getInstance();
if(!nv->checkInteger($p_iNum))
// throw IllegalArgumentException
// ...
}
最后,我的问题:这是在保持机智更好,更h最佳实践?有没有性能方面的考虑?这两种方法如何影响诸如并发性或来自多个用户的请求?
你为什么要为is_int编写一个包装对象成员函数? – markus 2011-04-15 20:47:21
我使用NumericValidator作为*示例*。实际上,无论我的*示例*是否具有逻辑意义,与我所问的问题无关,这与100%纯静态类与单例之间的性能差异有关。 – user709006 2011-04-15 20:51:03
[静态认为有害](http://kore-nordmann.de/blog/0103_static_considered_harmful.html) – Gordon 2011-04-15 22:08:20