我想在PHP中创建一个静态类,并使其行为与在C#中的行为相同,所以
第一次调用类时会自动调用构造函数
无需实例化
这种东西......
static class Hello { private static $greeting = 'Hello'; private __construct() { $greeting .= ' There!'; } public static greet(){ echo $greeting; } } Hello::greet(); // Hello There!
Greg.. 195
您可以在PHP中使用静态类,但它们不会自动调用构造函数(如果您尝试调用self::__construct()
,则会收到错误).
因此,您必须创建一个initialize()
函数并在每个方法中调用它:
我经常这样做只是为了将功能集中在一个地方.IE Utility :: doSomethingUseful(); (18认同)
取而代之的`所以你必须创建一个initialize()函数,并调用它在每个方法:`它会更容易使`initialize`公共函数和类的声明之后调用它. (15认同)
我知道这已经很老了,但现在你可以使用魔法[__callStatic](http://php.net/manual/en/language.oop5.overloading.php#object.callstatic)所以当你调用任何静态方法或任何东西时,它会首先调用`__callStatic`,在那里你可以看到它是否被初始化然后执行`self :: $ method`或者你正在调用的任何东西.如果它仍在直接调用方法,请尝试将所有内容更改为私有并查看. (4认同)
Phil.. 50
除了Greg的回答之外,我还建议将构造函数设置为private,以便无法实例化该类.
所以在我的拙见中,这是一个基于Greg的更完整的例子:
@EricHerlitz这个问题不是关于单身人士,而是关于静态课程.为什么要创建一个继承自要实例化的类的静态类? (4认同)
同样将类声明为抽象,以防止它被实例化,并且仍然允许调用静态方法. (3认同)
Andreas Nied.. 24
你可以拥有那些"静态"类.但我想,缺少一些非常重要的东西:在php中你没有应用程序循环,所以你不会在整个应用程序中获得真正的静态(或单例)...
请参阅PHP中的Singleton
您可以在PHP中使用静态类,但它们不会自动调用构造函数(如果您尝试调用self::__construct()
,则会收到错误).
因此,您必须创建一个initialize()
函数并在每个方法中调用它:
除了Greg的回答之外,我还建议将构造函数设置为private,以便无法实例化该类.
所以在我的拙见中,这是一个基于Greg的更完整的例子:
你可以拥有那些"静态"类.但我想,缺少一些非常重要的东西:在php中你没有应用程序循环,所以你不会在整个应用程序中获得真正的静态(或单例)...
请参阅PHP中的Singleton