PHP中的静态类初始化器

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

有没有一个很好的做法,实现这一目标?

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

听起来你最好是单身而不是一堆静态方法

 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(); 
 // file Foo.php class Foo { static function init() { /* ... */ } } Foo::init(); 

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

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

注意 – RFC提议这仍然在草稿状态。


 class Singleton { private static function __static() { //... } //... } 

提出了PHP 7.x(请参阅https://wiki.php.net/rfc/static_class_constructor