我有一个只有静态方法扩展类的子类。我想让这个子类成为单例而不是静态的,因为原始开发者确实想要一个单例,但是使用了静态(显而易见,因为静态类中的每个方法都调用Init()函数(基本上是构造函数))。非静态调用静态方法
大部分父方法不需要在孩子被覆盖,但我想,以避免写这样的方法:
public function Load($id)
{
return parent::Load($id);
}
的时候我宁愿不要覆盖方法,只是使用:
$child->Load($id);
是否可以非静态地调用静态方法?是否有可能使用实例对象来扩展静态对象?我知道我可以尝试它,它可能会工作(PHP是非常宽容的),但我不知道是否有什么我应该关心的。
为什么不只是使用普通的旧PHP对象?没有所有的静态和单例废话你可能[不需要]头痛(http://stackoverflow.com/questions/4595964/who-needs-singletons/4596323#4596323)。另外,是可测试的。毕竟,它被称为面向对象*而不是面向类。 – Gordon
Singleton是一种设计模式。它使用一个“普通的旧”php对象,它只是意味着它有一个私有的构造函数和一个静态的GetInstance方法。它确保只存在一个对象的实例,但由于它有一个构造函数,所以不必在每个方法中初始化变量。 – Mike
我知道单身是什么:)我所说的是:你不需要它。请参阅我的初始评论中的链接。你正在用静力学和单身生活让你的生活变得悲惨。 – Gordon