PHP中的静态类初始化器
我有一个辅助类与一些静态function。 类中的所有函数都需要一个“繁重的”初始化函数来运行一次(就像它是一个构造函数一样)。
有没有一个很好的做法,实现这一目标?
我唯一想到的就是调用一个init
函数,如果它已经运行一次(使用静态的$initialized
variables),就会中断它的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 )