在静态类中禁止构造函数是一种好习惯吗?

时间:2014-07-30 09:44:07

标签: php static-class

在我正在处理的应用程序中,有一些类只有静态函数。

这些类不遵循Singleton模式。将它们视为"工具"。

不是真实的例子:

class MathHelper {
    public static function plus($num1, $num2)
    {
        return $num1 + $num2;
    }
}

用...来禁止施工是不错的做法。

    private function __construct()
    {
    }

只是为了防止这样的类被实例化?

3 个答案:

答案 0 :(得分:1)

您可以将类定义为抽象以防止实例化。

abstract class MathHelper {
    public static function plus($num1, $num2)
    {
        return $num1 + $num2;
    }
}

echo MathHelper::plus(1,2); // 3
$math = new MathHelper(); // Fatal error: Cannot instantiate abstract class MathHelper

答案 1 :(得分:0)

将构造函数声明为private,并且不定义函数。 “有效C ++”一书的第6条谈到了这一点。

class MathHelper {
public:
    static function plus($num1, $num2)
    {
    return $num1 + $num2;
    }
private:
    MathHelper ();
}

答案 2 :(得分:0)

就像@ ian-brindley回答的那样,您可以通过声明您的班级abstract来阻止实例化,但如果您还想将该类声明为final,则可以省略abstract并抛出构造函数中的一个excption:

<?php
final class MyClass
{
  public function __construct()
  {
    throw new \Exception();
  }
}