【发布时间】:2013-03-20 09:04:16
【问题描述】:
我有一个子类,它扩展了一个只有静态方法的类。我想让这个子类成为单例而不是静态的,因为最初的开发人员真的想要一个单例,但使用了静态(很明显,因为静态类中的每个方法都调用 Init() 函数(基本上是构造函数))。
父级中的大多数方法不需要在子级中覆盖,但我想避免编写这样的方法:
public function Load($id)
{
return parent::Load($id);
}
当我根本不想覆盖该方法而只使用时:
$child->Load($id);
是否可以非静态地调用静态方法?是否可以使用实例对象扩展静态对象?我知道我可以试一试,它可能会奏效(PHP 非常宽容),但我不知道是否有什么我应该担心的。
【问题讨论】:
-
为什么不使用普通的旧 PHP 对象?对于您可能don't need 的所有静态和单例废话,您不必头疼。另外,是可测试的。毕竟,它被称为面向对象,而不是面向类。
-
单例是一种设计模式。它使用一个“普通的旧” php 对象,它只是意味着它有一个私有构造函数和一个静态 GetInstance 方法。它保证了一个对象只存在一个实例,但由于它有一个构造函数,你不必在每个方法中都初始化变量。
-
我知道单例是什么 :) 我的意思是:你不需要它。请参阅我最初评论中的链接。静态和单身让你的生活变得悲惨。
标签: php oop static-methods