Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
89.47% covered (warning)
89.47%
17 / 19
50.00% covered (danger)
50.00%
2 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
PhpErrorHandler
89.47% covered (warning)
89.47%
17 / 19
50.00% covered (danger)
50.00%
2 / 4
13.20
0.00% covered (danger)
0.00%
0 / 1
 register
66.67% covered (warning)
66.67%
2 / 3
0.00% covered (danger)
0.00%
0 / 1
2.15
 isTestEnvironment
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
 handle
90.00% covered (success)
90.00%
9 / 10
0.00% covered (danger)
0.00%
0 / 1
4.02
 severityToLogLevel
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
5
1<?php
2
3declare(strict_types=1);
4
5namespace BO\Slim\Helper;
6
7use Monolog\Logger;
8use Psr\Log\LoggerInterface;
9
10final class PhpErrorHandler
11{
12    public static function register(): void
13    {
14        if (self::isTestEnvironment()) {
15            return;
16        }
17
18        set_error_handler([self::class, 'handle']);
19    }
20
21    public static function isTestEnvironment(): bool
22    {
23        return defined('PHPUNIT_COMPOSER_INSTALL')
24            || getenv('PHPUNIT_COMPOSER_INSTALL') !== false;
25    }
26
27    public static function handle(int $severity, string $message, string $file, int $line): bool
28    {
29        if (!(error_reporting() & $severity)) {
30            return false;
31        }
32
33        if (!isset(\App::$log) || !\App::$log instanceof LoggerInterface) {
34            return false;
35        }
36
37        \App::$log->log(self::severityToLogLevel($severity), $message, [
38            'php_errno' => $severity,
39            'file' => $file,
40            'line' => $line,
41        ]);
42
43        return true;
44    }
45
46    public static function severityToLogLevel(int $severity): int
47    {
48        return match ($severity) {
49            E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE, E_USER_ERROR => Logger::ERROR,
50            E_WARNING, E_CORE_WARNING, E_COMPILE_WARNING, E_USER_WARNING => Logger::WARNING,
51            E_NOTICE, E_USER_NOTICE, E_STRICT, E_DEPRECATED, E_USER_DEPRECATED => Logger::NOTICE,
52            default => Logger::WARNING,
53        };
54    }
55}