在我正在开发的应用程序中,有一些只有静态函数的类。
这些类不遵循单例模式。把它们当作"工具"。
非真实示例:
class MathHelper {
public static function plus($num1, $num2)
{
return $num1 + $num2;
}
}
禁止使用…的构造是好做法吗?
private function __construct()
{
}
只是为了防止这样的类被实例化?
可以将类定义为抽象类,以防止实例化。
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
声明构造函数为private,不定义函数。《effective c++》一书的第6条谈到了这一点。
class MathHelper {
public:
static function plus($num1, $num2)
{
return $num1 + $num2;
}
private:
MathHelper ();
}
就像@ian-brindley回答的那样,你可以通过声明你的类abstract
来防止实例化,但如果你也想将该类声明为final
,你可以省略abstract
并在构造函数中抛出异常:
<?php
final class MyClass
{
public function __construct()
{
throw new 'Exception();
}
}