编写一个PHP应用程序,并且有几个仅的类具有静态方法(不需要实例方法)。一个示例是NumericValidator
,其中包含checkInteger($toCheck)
等方法,用于检查以确保传递的参数为int类型,checkGreaterThan($lOperand, $rOperand)
确保左操作数为大于右操作数等。
我知道我可以将这些方法中的每一个都放入PHP文件而不将它们放在类中,但是我想在这里采用OOP方法,以防API发展为需要实例化{ {1}}。
但它确实提出了一个问题:100%静态方法的类如何与一个类实现单例设计模式有什么不同,其中整个代码库中使用的每个引用都调用相同的实例?
例如,以下是我的代码现在的样子:
NumericValidator
但我可以将所有public function doSomething($p_iNum)
{
if(!NumericValidator::checkInteger($p_iNum))
// throw IllegalArgumentException
// ...
}
的静态方法转换为非静态实例方法,迫使程序员实例化它,然后实现单例设计模式,这样你才能永远参考它的一个实例:
NumericValidator
最后,我的问题:哪个更好,更符合最佳做法?是否有性能方面的考虑?这两种方法如何影响并发或来自多个用户的请求?
答案 0 :(得分:1)
我会在你的例子中使用静态类。我将使用的区别是,如果您尝试在访问中保留实例的任何属性状态。这就是单身人士的设计目标。静态类提供对命名空间中方法的有组织的访问,这有助于清晰地显示代码,但它没有任何关于自身的属性。
所以是的,你可以使用单例,但它会是糟糕的形式,因为你没有想要在页面访问中提供的实例属性。
希望这有帮助。
答案 1 :(得分:0)
在PHP 5.3中,您可以获得静态类的实例:
班级考试 { 公共静态函数实例() { 打印' zz&#39 ;; } }
$ z =新测试; $ Z->实例();
不关心PHP中的并发请求,它是单线程的,每个进程都执行自己的代码。