Bol*_*wyn 21 php static class abstract
根据PHP手册,这样的类:
abstract class Example {}
Run Code Online (Sandbox Code Playgroud)
无法实例化.如果我需要一个没有实例的类,例如注册表模式:
class Registry {}
// and later:
echo Registry::$someValue;
Run Code Online (Sandbox Code Playgroud)
简单地将类声明为抽象是否会被认为是好的风格?如果没有,与抽象类相比,隐藏构造函数作为受保护方法有什么好处?
问的理由:据我所知,它可能会有一些功能滥用,因为手册将抽象类更多地描述为具有实例化可能性的后续类的蓝图.
更新:首先,感谢所有的答案!但是很多答案听起来很相似:'你不能实例化一个抽象类,但对于注册表,为什么不使用单例模式?'
不幸的是,这或多或少完全是我的问题的重复.使用单例模式(也就是隐藏)与仅仅声明它而不必担心它相比有什么优势?(例如,开发人员之间的强烈内涵,实际上并没有使用类.)__construct()abstractabstract
Pas*_*TIN 19
如果你的类不是要定义一些超类型abstract,我不应该声明它,我会说.
在你的情况下,我宁愿去上课:
__construct和__clone私有方法
现在,为什么要使用Singleton,而不仅仅是静态方法?我想,至少有几个原因是有效的:
__construct和__cloneprivate,并添加一些getInstance方法.$this,属性,...__callStatic 仅在PHP 5.3中引入__getStatic,__setStatic...
这就是说,是的,有些代码是这样的:
abstract class MyClass {
protected static $data;
public static function setA($a) {
self::$data['a'] = $a;
}
public static function getA() {
return self::$data['a'];
}
}
MyClass::setA(20);
var_dump(MyClass::getA());
Run Code Online (Sandbox Code Playgroud)
会工作......但它感觉不太自然......这是一个非常简单的例子(参见我之前所说的Late Static Binding和魔术方法).