Scrutinizer GitHub App not installed

We could not synchronize checks via GitHub's checks API since Scrutinizer's GitHub App is not installed for this repository.

Install GitHub App

Issues (412)

src/lib/Smr/Epoch.php (3 issues)

Labels
Severity
1
<?php declare(strict_types=1);
2
3
namespace Smr;
4
5
use Exception;
6
use Smr\Container\DiContainer;
7
8
/**
9
 * Stores the current time as a fixed value.
10
 * This is useful for ensuring that times are used consistently within the
11
 * context of an individual page request. It does not, however, represent
12
 * the start time of the request.
13
 *
14
 * The static methods are a convenience wrapper around the instance of this
15
 * class stored in the DI container (which is set on the first query, and
16
 * then remains unchanged in subsequent calls).
17
 */
18
class Epoch {
19
20
	private readonly float $microtime;
21
	private readonly int $time;
22
23
	public function __construct() {
24
		$this->microtime = microtime(true);
0 ignored issues
show
The property microtime is declared read-only in Smr\Epoch.
Loading history...
25
		$this->time = IFloor($this->microtime);
0 ignored issues
show
The property time is declared read-only in Smr\Epoch.
Loading history...
The function IFloor was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

25
		$this->time = /** @scrutinizer ignore-call */ IFloor($this->microtime);
Loading history...
26
	}
27
28
	public function getMicrotime(): float {
29
		return $this->microtime;
30
	}
31
32
	public function getTime(): int {
33
		return $this->time;
34
	}
35
36
	/**
37
	 * Returns the instance of this class from the DI container.
38
	 * The first time this is called, it will populate the DI container,
39
	 * and this will be the time associated with the page request.
40
	 */
41
	private static function getInstance(): self {
42
		return DiContainer::get(self::class);
43
	}
44
45
	/**
46
	 * Return the time (in seconds, with microsecond-level precision)
47
	 * associated with a page request (i.e. stored in the DI container).
48
	 */
49
	public static function microtime(): float {
50
		return self::getInstance()->getMicrotime();
51
	}
52
53
	/**
54
	 * Return the time (in seconds) associated with a page request
55
	 * (i.e. stored in the DI container).
56
	 */
57
	public static function time(): int {
58
		return self::getInstance()->getTime();
59
	}
60
61
	/**
62
	 * Update the time associated with this page request
63
	 * (i.e. stored in the DI container).
64
	 *
65
	 * NOTE: This should never be called by normal page requests, and should
66
	 * only be used by the CLI programs that run continuously.
67
	 */
68
	public static function update(): void {
69
		if (DiContainer::get('NPC_SCRIPT') === false) {
70
			throw new Exception('Only call this function from CLI programs!');
71
		}
72
		DiContainer::getContainer()->set(self::class, new self());
73
	}
74
75
}
76