1
19
(参见我前面所说的后期静态绑定和魔术方法) . |
2
3
诚然,如果您要将抽象类交给另一个不符合您预期用途的开发人员,那么您只需要担心这个问题,但这就是为什么您要将该类也设置为单例的原因。不合作的开发人员可以重写私有构造函数:
如果你自己使用这个类,你只会记住 实例化类。那你就不需要任何一种机制来阻止它了。因此,既然您将此设计为供其他人使用,就需要某种方法来防止这些人绕过您的预期用途。
|
3
1
正如其他人所说,你不能实例化一个抽象类。你可以在你的类中使用静态方法来阻止实例化,但我并不喜欢这样做,除非我有正当的理由。 我现在可能有点离题了,但在您的示例中,您说过您希望将此用于Registry模式类。你不想实例化它的原因是什么?为要使用的每个注册表创建一个Registry实例不是更好吗?
在这种情况下我甚至不会使用Singleton。 |
4
1
摘要也是一种误导。抽象是定义一个实现某些功能,但需要更多行为(通过继承添加)才能正常工作的类。除此之外,它通常是一个特性,不应该使用静态的。你实际上是在邀请程序员错误地使用它。
|
5
1
OO中有一些模式是常见的,并且是公认的。使用
|
6
0
注册表通常遵循单例模式,这意味着它们将在私有变量中实例化自身。定义为
|
7
0
|
8
0
为了对一些php文档进行截取,假设您正在连接到一个数据库。连接到数据库没有多大意义,除非您要连接到特定类型的数据库。然而,无论数据库的类型如何,连接都是您想要做的事情。因此,可以在抽象数据库类中定义连接,并通过MYSQL类继承连接,使连接变得有意义。 从您的需求来看,听起来您并不打算这样做,而是只需要一个没有实例的类。虽然您可以使用抽象类来强制执行这种行为,但对我来说这似乎有点麻烦,因为它滥用了抽象类的用途。如果我遇到一个抽象类,我应该能够合理地预期这将有一些抽象方法,例如,但您的类将没有。 因此,单身似乎是一个更好的选择。
更新: 这里的正确方法肯定不是使用单例或抽象类,而是使用依赖注入。快速的方法是拥有大量的global或抽象类。 |
9
0
因此,要回答您的问题,您不需要“singleton类”,而是需要一个singleton对象,可选地配备工厂方法:
|
10
0
我想说这是一个编码习惯的问题。当您想到一个抽象类时,通常需要将其子类化才能使用。所以声明类抽象是违反直觉的。 除此之外,只需在方法中使用self::$somevar,而不是$this->somevar,如果您将其实现为单例。 |
eddyP23 · java中扩展抽象外部类的静态内部类[重复] 7 年前 |
John · 抽象类继承的泛型接口的实例化问题 7 年前 |
Typhaon · 我可以在抽象类中更改变量的类吗 8 年前 |
ReX357 · JAVA:抽象静态方法的合法需求 9 年前 |
Banjo Drill · AngularJS可重复使用工厂 9 年前 |
user3667122 · 如何在Java中将静态抽象类用作回调? 9 年前 |