我有一个带有一些静态函数的助手类。类中的所有函数都需要一个“重”初始化函数才能运行一次(就像它是一个构造函数一样)。
有没有一个很好的实践来实现这个目标?
我唯一想到的就是调用一个init
函数,如果它已经运行过一次,就中断它的流(使用静态$initialized
变量)。问题是我需要在类的每个函数上调用它。
发布于 2010-07-23 03:56:05
听起来使用单例方法比使用一堆静态方法更好
class Singleton
{
/**
*
* @var Singleton
*/
private static $instance;
private function __construct()
{
// Your "heavy" initialization stuff here
}
public static function getInstance()
{
if ( is_null( self::$instance ) )
{
self::$instance = new self();
}
return self::$instance;
}
public function someMethod1()
{
// whatever
}
public function someMethod2()
{
// whatever
}
}
然后,在用法上
// As opposed to this
Singleton::someMethod1();
// You'd do this
Singleton::getInstance()->someMethod1();
发布于 2010-07-23 03:58:23
// file Foo.php
class Foo
{
static function init() { /* ... */ }
}
Foo::init();
这样,初始化就会在包含类文件时发生。通过使用自动加载,您可以确保这只在必要时发生(且只发生一次)。
发布于 2010-07-23 04:29:18
实际上,我在需要初始化(或者至少需要执行一些代码)的静态类上使用公共静态方法__init__()
。然后,在我的自动加载器中,当它加载一个类时,它会检查is_callable($class, '__init__')
。如果是,它会调用该方法。快速,简单,有效...
https://stackoverflow.com/questions/3312806
复制相似问题