Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
62.50% covered (warning)
62.50%
5 / 8
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
InitializeChecker
62.50% covered (warning)
62.50%
5 / 8
0.00% covered (danger)
0.00%
0 / 3
7.90
0.00% covered (danger)
0.00%
0 / 1
 initialize
66.67% covered (warning)
66.67%
2 / 3
0.00% covered (danger)
0.00%
0 / 1
2.15
 throwIfNotInitializeCore
50.00% covered (danger)
50.00%
1 / 2
0.00% covered (danger)
0.00%
0 / 1
2.50
 throwIfNotInitialize
66.67% covered (warning)
66.67%
2 / 3
0.00% covered (danger)
0.00%
0 / 1
2.15
1<?php
2
3declare(strict_types=1);
4
5namespace PeServer\Core;
6
7use PeServer\Core\Throws\InvalidOperationException;
8
9/**
10 * 初期化状態チェック処理。
11 *
12 * 静的初期化が必要なクラスに対する防御として構築しており、使用側でも定型の呼び出しが必要となる。
13 */
14final class InitializeChecker
15{
16    #region variable
17
18    /**
19     * 初期化済みか。
20     */
21    private bool $isInitialized  = false;
22
23    #endregion
24
25    #region function
26
27    /**
28     * 初期化処理。
29     *
30     * すでに初期化されている場合は例外が投げられる。
31     *
32     * @throws InvalidOperationException 既に初期化されている。
33     */
34    public function initialize(): void
35    {
36        if ($this->isInitialized) {
37            throw new InvalidOperationException('initialized');
38        }
39
40        $this->isInitialized = true;
41    }
42
43    private function throwIfNotInitializeCore(): void
44    {
45        if (!$this->isInitialized) {
46            throw new InvalidOperationException('not initialize');
47        }
48    }
49
50    /**
51     * 初期化されていない場合に例外を投げる。
52     *
53     * @throws InvalidOperationException 初期化されていない。
54     */
55    public static function throwIfNotInitialize(?InitializeChecker $checker): void
56    {
57        if ($checker === null) {
58            throw new InvalidOperationException('not initialize(null)');
59        }
60        $checker->throwIfNotInitializeCore();
61    }
62
63    #endregion
64}