Инициализатор статического класса в PHP

У меня есть вспомогательный класс с некоторыми статическими функциями. Все функции класса требуют, чтобы «тяжелая» функция инициализации запускалась один раз (как если бы это был конструктор).

Есть ли хорошая практика для достижения этого?

Единственное, о чем я думал, это вызов функции init и нарушение ее потока, если он уже запускался один раз (используя статический $initialized var var). Проблема в том, что мне нужно вызвать ее на каждой из функций класса.

    Похоже, вам лучше будет обслуживать синглтон, а не пучок статических методов

     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(); 

    Таким образом, инициализация происходит, когда файл класса включен. Вы можете убедиться, что это происходит только при необходимости (и только один раз), используя автозагрузку.

    Фактически, я использую публичный статический метод __init__() для своих статических классов, для которых требуется инициализация (или, по крайней мере, нужно выполнить какой-то код). Затем, в моем автозагрузчике, когда он загружает класс, он проверяет is_callable($class, '__init__') . Если это так, он вызывает этот метод. Быстро, просто и эффективно …

    Примечание. RFC, предлагающий это, все еще находится в проекте состояния.


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

    предлагается для PHP 7.x (см. https://wiki.php.net/rfc/static_class_constructor )