首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP中的静态类初始化器

PHP中的静态类初始化器
EN

Stack Overflow用户
提问于 2010-07-23 03:49:27
回答 5查看 108.5K关注 0票数 104

我有一个带有一些静态函数的助手类。类中的所有函数都需要一个“重”初始化函数才能运行一次(就像它是一个构造函数一样)。

有没有一个很好的实践来实现这个目标?

我唯一想到的就是调用一个init函数,如果它已经运行过一次,就中断它的流(使用静态$initialized变量)。问题是我需要在类的每个函数上调用它。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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();
票数 125
EN

Stack Overflow用户

发布于 2010-07-23 03:58:23

// file Foo.php
class Foo
{
  static function init() { /* ... */ }
}

Foo::init();

这样,初始化就会在包含类文件时发生。通过使用自动加载,您可以确保这只在必要时发生(且只发生一次)。

票数 99
EN

Stack Overflow用户

发布于 2010-07-23 04:29:18

实际上,我在需要初始化(或者至少需要执行一些代码)的静态类上使用公共静态方法__init__()。然后,在我的自动加载器中,当它加载一个类时,它会检查is_callable($class, '__init__')。如果是,它会调用该方法。快速,简单,有效...

票数 57
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3312806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档